1

ビットマップ ファイル内の各ピクセルのピクセル カラー値を抽出するコードを作成しようとしています。このような目的のために、bmp をビットマップ オブジェクトとしてインポートし、Bitmap.GetPixel(x,y) メソッドを使用しましたが、アプリケーションにとって十分な速度ではありませんでした。同僚の 1 人がアドバイスをくれました。fopen を使用してファイル自体を開き、バイトデータを配列に解析できると思います。どなたか心当たりはありませんか?fopen メソッドの使用は必須ではなく、何でも使用できます。

前もって感謝します。

4

1 に答える 1

2

安全でないコード ブロックを使用するか、またはMarshal クラスを利用できます。私はこのように解決します:

public static byte[] GetBytesWithMarshaling(Bitmap bitmap)
{
    int height = bitmap.Height;
    int width = bitmap.Width;

    //PixelFormat.Format24bppRgb => B|G|R => 3 x 1 byte
    //Lock the image
    BitmapData bmpData = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
    // 3 bytes per pixel
    int numberOfBytes = width * height * 3;
    byte[] imageBytes = new byte[numberOfBytes];

    //Get the pointer to the first scan line
    IntPtr sourcePtr = bmpData.Scan0;
    Marshal.Copy(sourcePtr, imageBytes, 0, numberOfBytes);

    //Unlock the image
    bitmap.UnlockBits(bmpData);

    return imageBytes;
}
于 2013-08-02T09:39:26.657 に答える