ちょっとハマったのでメモ
経緯
画像のバイナリが欲しいと思って、思い違いをしたというだけですが
- (a) 画像ファイルとしてのバイナリ
- (b) ピクセル(RGBなど)情報のつまったバイナリ
(b)を求めて「C# Image バイナリ」なんかで調べて(a)が検索でヒット、
バイナリのサイズが横幅×高さ×1ピクセルあたりの容量(RGBAだと4)にならず、
なんで少ないんだーと悩んでいたら(a)だったというオチ。
PNGの生のバイナリデータを受け取って、RGB操作してやろーと、躍起になってました(残念)
(a) ファイルのbyteデータ取得のコード
// 受け取れるバイナリは、test_1.png のバイナリデータ(絵じゃない)
var img = Image.FromFile(@"test_1.png");
var imgconv = new ImageConverter();
byte[] b = (byte[])imgconv.ConvertTo(img, typeof(byte[]));
(b) ピクセル(絵)のbyteデータ取得のコード
// こっちを求めてた
var img = Image.FromFile(@"test_1.png");
BitmapData bmpData = img.LockBits(new Rectangle(0, 0, img.Width, img.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
byte[] pixels = new byte[img.Width * img.Height * 4];
Marshal.Copy(bmpData.Scan0, pixels, 0, pixels.Length);
// 最初にこれ
using System.Drawing.Imaging; // Image
using System.Runtime.InteropServices; // Marshalで使う?