1

ビットマップのピクセルを短い配列に変換する必要があります。したがって、私はしたい:

  • バイトを取得します
  • バイトをshortに変換します

これは、バイトを取得するための私のソースです。

 public byte[] BitmapToByte(Bitmap source)
 {
     using (var memoryStream = new MemoryStream())
     {
         source.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Bmp);
         return memoryStream.ToArray();
     }
 }

これは期待される結果を返していません。データを変換する別の方法はありますか?

4

1 に答える 1

7

問題を正しく説明してください。「バイトが足りない」というのは解決できるものではありません。どのようなデータを期待し、何を見ていますか?

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バイトを使用して、ソースビットマップのすべてのピクセルが含まれます。なぜショーツの配列が必要なのかわかりませんが、ここからそれを理解できる必要があります。

于 2012-11-28T10:01:07.830 に答える