「Xamarin.Macで画素配列からCGImageを生成する」の版間の差分
imported>Administrator |
imported>Administrator |
||
| 2行目: | 2行目: | ||
== RGB画像 == | == RGB画像 == | ||
RGBなのでコンポーネント数は3で問題ないと思う。 | |||
<source lang="csharp"> | <source lang="csharp"> | ||
public static CGImage CreateImage() | public static CGImage CreateImage() | ||
| 43行目: | 43行目: | ||
return cgImage; | return cgImage; | ||
} | } | ||
</source> | |||
拾ってきたLennaの画像は正常にデコードできたようだ。 | |||
<source> | |||
var error = ""; | |||
var header = new JlsParameters(); | |||
var dst = new MemoryStream(); | |||
var path = Path.Combine(NSBundle.MainBundle.BundlePath, "Contents", "Resources", "lena24b.jpg"); | |||
var src = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None); | |||
var result = Jpeg.Decode(dst, src, header, out error); | |||
Console.WriteLine(header); | |||
dst.Seek(0, SeekOrigin.Begin); | |||
var buf = dst.ToArray(); | |||
// 画素データ | |||
var data = new CGDataProvider(buf); | |||
var colorspace = CGColorSpace.CreateDeviceRGB(); | |||
var cgImage = new CGImage( | |||
header.width, | |||
header.height, | |||
header.bitsPerSample, | |||
header.bitsPerSample * header.components, | |||
header.components * header.width, | |||
colorspace, | |||
CGBitmapFlags.ByteOrderDefault, | |||
data, | |||
decode: null, | |||
shouldInterpolate: false, | |||
intent: CGColorRenderingIntent.Default); | |||
var nsImage = new NSImage(cgImage, new CGSize(cgImage.Width, cgImage.Height)); | |||
</source> | </source> | ||