2012-06-07 8 views
6

ビットマップへ:バイト配列またはマトリックスは、私は現在、次のような問題が生じています

Byte1: R color of pixel 0,0. 
Byte2: G color of pixel 0,0. 
Byte3: B color of pixel 0,0. 
Byte4: R color of pixel 0,1. 

... 
ByteN: R color of pixel n,n. 

は、だから私は何をしたいのか、これらを変換している:私は、次の構成を使用してファイルから来てバイト配列を変換したいですピクセルをピクセル単位で設定することなく、ビットマップにバイトを埋め込むことができます。時間がかかりすぎるため、bitmap.setPixelをピクセル単位で設定する必要はありません。

提案がありますか?前もって感謝します!

+0

あなたが持っているすべてをバイト配列である場合は、幅/高さを決定している方法は?それは2次元配列ですか?それは手前であなたに与えられていますか? – vcsjones

+0

あなたはこれを見ましたか? http://stackoverflow.com/questions/6782489/create-bitmap-from-byte-array-of-pixel-dataビットマップクラスには、バイト配列を直接使用するctorがあります。http://msdn.microsoft.com/en -us/library/zy1a2d14 – kol

+0

はい、私は画像の幅と高さを持っています。この場合、その1280 x 720. – waclock

答えて

11

ピクセルと幅と高さがbyte[]の場合は、BitmapDataを使用して、フォーマットを知っているので、ビットマップにバイトを書き込むことができます。ここに例があります:

//Your actual bytes 
byte[] bytes = {255, 0, 0, 0, 0, 255}; 
var width = 2; 
var height = 1; 
//Make sure to clean up resources 
var bitmap = new Bitmap(width, height); 
var data = bitmap.LockBits(new Rectangle(Point.Empty, bitmap.Size), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb); 
Marshal.Copy(bytes, 0, data.Scan0, bytes.Length); 
bitmap.UnlockBits(data); 

これは非常に高速です。

あなたは最低でも、あなたのC#ファイルの先頭にこれらの3つの名前空間をインポートする必要があります。

using System.Drawing; 
using System.Drawing.Imaging; 
using System.Runtime.InteropServices; 
+0

あなたの回答をありがとう、コードを使用しようとしましたが、ImageLockMode、PixelFormat、およびMarshalは認識されません。どのような余分なライブラリが必要ですか? – waclock

+0

いくつかの 'using'sを追加する必要があります。私の編集を参照してください。 – vcsjones

+0

ありがとう、それは完璧に働いた! – waclock

関連する問題