「Xamarin.Macで画素配列からCGImageを生成する」の版間の差分
imported>Administrator ページの作成:「勉強がてらJPEGのコーデックをC#で実装してみているのだが、デコード済みの画素データが格納されたbyte配列からCGImageを生成し...」 |
Administrator (トーク | 投稿記録) 細 Administrator がページ「Xamarin.Mac/画素配列からCGImageを生成する」を「Xamarin.Macで画素配列からCGImageを生成する」に移動しました |
||
| (他の1人の利用者による、間の5版が非表示) | |||
| 43行目: | 43行目: | ||
return cgImage; | return cgImage; | ||
} | } | ||
</source> | |||
拾ってきたLennaの画像は正常にデコードできたようだ。 | |||
画素の入ったbyte配列をCGDataProviderクラスで[[ラップ]]してCGImageの[[コンストラクタ]]に渡すのがポイント。 | |||
<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> | ||
| 97行目: | 131行目: | ||
== 関連項目 == | == 関連項目 == | ||
* [[Xamarin.Mac/CGImageをNSImageに変換する]] | |||
* [[Xamarin.Mac/CGImageをファイルに保存する]] | |||
== 参考文献 == | == 参考文献 == | ||