メインメニューを開く

差分

Xamarin.Macで画素配列からCGImageを生成する

1,482 バイト追加, 2019年12月25日 (水) 08:04
== RGB画像 ==
RGBなのでコンポーネント数は3で問題ないと思う。拾ってきたLennaの画像は正常にデコードできたようだ。RGBなのでコンポーネント数は3で問題ないと思う。
<source lang="csharp">
public static CGImage CreateImage()
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>
== 関連項目 ==
* [[Xamarin.Mac/CGImageをNSImageに変換する]]
* [[Xamarin.Mac/CGImageをファイルに保存する]]
== 参考文献 ==