差分

ナビゲーションに移動 検索に移動

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

3,306 バイト追加, 2017年8月21日 (月) 07:31
ページの作成:「勉強がてらJPEGのコーデックをC#で実装してみているのだが、デコード済みの画素データが格納されたbyte配列からCGImageを生成し...」
勉強がてらJPEGのコーデックをC#で実装してみているのだが、デコード済みの画素データが格納されたbyte配列からCGImageを生成したい。

== RGB画像 ==
RGBなのでコンポーネント数は3で問題ないと思う。
<source lang="csharp">
public static CGImage CreateImage()
{
var colorSpace = CGColorSpace.CreateDeviceRGB();
var width = 512;
var height = 512;
var bitsPerSample = 8;
var components = 3;//RGB
var bitsPerPixel = bitsPerSample * components;
var bytesPerRow = bitsPerPixel / 8 * width;
var buffer = new byte[width * height * components];

int a = 0;
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
var c = (byte)((1 << bitsPerSample) * ((float)y / width));
buffer[a++] = c;
buffer[a++] = 0;
buffer[a++] = 0;
}
}

var data = new CGDataProvider(buffer);
var cgImage = new CGImage(
width,
height,
bitsPerSample,
bitsPerPixel,
bytesPerRow,
colorSpace,
CGBitmapFlags.ByteOrderDefault,
data,
decode: null,
shouldInterpolate: false,
intent: CGColorRenderingIntent.Default);

return cgImage;
}
</source>

== インデックスカラー画像 ==
ついでにインデックスカラーも試してみた。
<source lang="csharp">
public static CGImage CreateIndexedImage()
{
var colors = new byte[] {
0, 0, 0,
63, 0, 0,
127, 0, 0,
191, 0, 0,
255, 0, 0
};
var colorSpace = CGColorSpace.CreateIndexed(CGColorSpace.CreateDeviceRGB(), colors.Length / 3, colors);

var width = 512;
var height = 512;
var bitsPerSample = 8;
var components = 1;// Indexed Color

var bitsPerPixel = bitsPerSample * components;
var bytesPerRow = bitsPerPixel / 8 * width;
var buffer = new byte[width * height * components];

int a = 0;
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
var c = (byte)((colors.Length / 3) * ((float)y / width));
buffer[a++] = c;
}
}

var data = new CGDataProvider(buffer);
var cgImage = new CGImage(
width,
height,
bitsPerSample,
bitsPerPixel,
bytesPerRow,
colorSpace,
CGBitmapFlags.ByteOrderDefault,
data,
decode: null,
shouldInterpolate: false,
intent: CGColorRenderingIntent.Default);

return cgImage;
}
</source>

== 関連項目 ==

== 参考文献 ==
{{reflist}}

[[category: Xamarin.Mac]]
[[category: Core Graphics]]
匿名利用者

案内メニュー