問題を正しく説明してください。「バイトが足りない」というのは解決できるものではありません。どのようなデータを期待し、何を見ていますか?
Bitmap.Save()
指定された形式に従ってデータを返します。これには、すべての場合で、ピクセルデータ(幅と高さ、カラー/パレットデータなどを説明するヘッダー)だけではありません。ピクセルデータの配列だけが必要な場合は、次を確認することをお勧めしますBimap.LockBits()
。
Bitmap bmp = new Bitmap("c:\\fakePhoto.jpg");
// Lock the bitmap's bits.
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat);
// Get the address of the first line.
IntPtr ptr = bmpData.Scan0;
// Declare an array to hold the bytes of the bitmap.
int bytes = Math.Abs(bmpData.Stride) * bmp.Height;
byte[] rgbValues = new byte[bytes];
// Copy the RGB values into the array.
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);
これで、rgbValues
配列には、ピクセルあたり3バイトを使用して、ソースビットマップのすべてのピクセルが含まれます。なぜショーツの配列が必要なのかわかりませんが、ここからそれを理解できる必要があります。