LoginSignup
5
3

More than 5 years have passed since last update.

画像のファイルバイナリそのものとRGBAバイナリ

Posted at

ちょっとハマったのでメモ

経緯

画像のバイナリが欲しいと思って、思い違いをしたというだけですが

  • (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で使う?
5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3