2016-12-24 16 views
0

OpenFileDialogで任意のファイルタイプを選択し、ファイルビットをビットマップイメージに表示します。選択したファイルに0/1ビットが含まれていることを意味します。幅と高さがユーザーから得られる白黒画像で表示したいのです。また、選択したファイルのサイズに制限がないようにしたい。それはメモリが処理できるほど大きなものである可能性があります。何か案が?C# - 任意のファイルタイプをピクチャボックスのビットマップ表示に変換する

+1

に画像を割り当て、それをロードします。 –

答えて

3

ファイルが有効なイメージファイルである場合は、単にこのようなイメージ読むことができます:

Image image = Image.FromFile(pathOfImage); 

を...そして、ピクチャボックスに割り当てます。

System.Drawing.dllへの参照があり、コードの先頭にusing using System.Drawing;が含まれている必要があります。


ただし、ファイル内のビットが黒と白のピクセルを表す場合は、自分でイメージを描画する必要があります。

最初にBitmapを作成し、そこからグラフィックスオブジェクトを作成します。その上にピクセルを描画することができます。

using (var image = new Bitmap(width, height)) 
using (var g = Graphics.FromImage(image)) { 
    // TODO: Draw using the graphics object. (Insert code below) 
} 

あなたはビットを読み取るために、この答えからの回答を使用することができます。BinaryReader - Reading a Single “ BIT ”?

あなたはその後、ビットを反復処理することができ、二重ループで。ビットライン毎に格納されていると仮定すると:

using (var stream = new FileStream("file.dat", FileMode.Open)) { 
    for (int y = 0; y < height; y++) { 
     for (int x = 0; x < width; x++) { 
      bool? bit = stream.ReadBit(true); 
      if (bit == null) { // No more bits 
       return; 
      } 
      if (bit.Value) { 
       g.FillRectangle(Brushes.White, x, y, 1, 1); 
      } 
     } 
    } 
} 

最後にビットマップ画像に任意のバイトを変換する関数を書く画像ボックス

pictureBox1.Image = image; 
+0

ファイルは有効な画像ではありません。彼は任意のファイルのビットフィールドの白黒表現を望んでいます。 –

+0

これは混乱します。有効なイメージファイルも0と1ビットで構成されています。 –

+1

Graphicsオブジェクトの代わりに['Bitmap.LockBits'](https://msdn.microsoft.com/en-us/library/system.drawing.bitmap.lockbits(v = vs.110).aspx)を使用します。 1ビット/ピクセルのビットマップを使用します。 (答えを書くだろうが、私は今日私の電話に限定されている) –

関連する問題