在C#中将位图转换为二进制数据

时间:2013-07-23 14:15:18

标签: c# bitmap bitmapimage

现在有一天我更喜欢位图及其转换。这次我想将我的位图图像转换为二进制值(1,1,0,0,....,0,1,1)。

我在google搜索的帮助下尝试了下面的代码片段。

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打印图像时,我无法看到确切的图像。

我想确认一下,这上面的代码是否足够好。如果是,可能是我在进一步处理二进制数据时犯了错误。

请帮助我这样做。

原因用于获取位图的二进制数据: 我有一个API,它需要一个图像的二进制数据作为输入。 现在我得到了一些错误的结果。只需要检查输入是否正确?

1 个答案:

答案 0 :(得分:0)

好的,首先是挑剔的事情:

  • 你不应该把文件扔进c:\,虽然这可能只是我的 宠儿小便。
  • 它是string.Empty,而不是string.Empty()
  • 使用StringBuilder而不是字符串可能会更快。一组简单的优化在10x10位图上运行1,000,000次,从平均423ms变为平均120ms。其他优化也可能加快速度。

现在主要的事情是:

您的代码开始从左到右读取列,然后是每列中的每一行。最终结果是,您生成的11100010101010....数据看起来像逆时针旋转了90度。

希望这能指明你正确的方向。