0

今では、ビットマップとその変換に夢中になっています。今回は、ビットマップ イメージをバイナリ値 (1,1,0,0,....,0,1,1) に変換したいと思います。

グーグルの助けを借りて、以下のコードスニペットを試しました。

string bmpFilePath= @"C:\Sample.bmp";
Bitmap bmp = new Bitmap(bmpFilePath);

short[,] array = new short[bmp.Height, bmp.Width];
Color color;
int binaryVal  = 0;
string strBinaryData = string.Empty();
for (int x = 0; x < bmp.Width; x++) 
{
     for (int y = 0; y < bmp.Height; y++) 
     {
    color = bmp.GetPixel(x, y);
    binaryVal   = Color.White.ToArgb() == color.ToArgb() ? (short)1 : (short)0;
        strBinaryData += binaryVal.ToString();
     }
}
//StrBinaryData contains the String of binary values.

モノクロのビットマップ イメージを使用してバイナリ データを取得しています。コードは私にとって完璧に見えますが、API の 1 つで画像を印刷しようとすると、正確な画像を見ることができません。

上記のコードで十分かどうかを確認したいと思います。はいの場合、おそらくそのバイナリ データをさらに処理する際に間違いを犯している可能性があります。

そうするのを手伝ってください。

ビットマップのバイナリ データをフェッチする理由: 使用する API があります。この API は、入力としてイメージのバイナリ データを想定しています。今、私はいくつかの間違った結果を得ています。入力が正しいかどうかを確認する必要がありますか?

4

1 に答える 1

0

わかりました、最初に厄介なこと:

  • c:\ にファイルを投げるべきではありませんが、それは私の不満かもしれません。
  • string.Emptyはありませんstring.Empty()
  • 文字列の代わりに StringBuilder を使用すると、おそらく高速になります。単純な一連の最適化は、平均 423 ミリ秒から平均 120 ミリ秒に変更された 10x10 ビットマップで 1,000,000 回実行されます。他の最適化もおそらく同様に高速化されるでしょう。

今重要なこと:

コードは列を左から右に読み取り始め、次に各列の各行を読み取ります。最終的な結果は、結果の11100010101010....データが反時計回りに 90 度回転した画像のように見えることです。

うまくいけば、それはあなたを正しい方向に向けます。

于 2013-07-23T14:54:09.317 に答える