2013-07-23 42 views
0

现在,我更倾向于位图及其转换。这次我想将我的位图图像转换为二进制值(1,1,0,0,...,0,1,1)。将位图转换为C#中的二进制数据

我尝试了下面的代码片段,在一些谷歌搜索的帮助下。

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

有没有什么办法可以看到它可以帮助你,你说你的代码有效,但你的神秘API不支持它?至少你需要提及api – Sayse

+0

你的阅读图像的代码是OK的。但是,实际存在问题的打印图像代码在哪里?你忘了打印行结尾'\ n'? –

+0

你确定你的API想要一个二进制字符串,比如“0100110101001111111011”吗?还是它要求一个二进制*流*,它实际上是一个'byte []',数组中的每个字节对应8个像素值?你需要向我们展示API。 –

回答

0

好吧,首先在挑剔的事情:

  • 你不应该在C投掷文件:\,尽管这可能只是我的 忌讳。
  • 这是string.Empty而不是string.Empty()
  • 使用StringBuilder而不是字符串可能会更快。一个简单的优化集在10x10位图上运行1,000,000次,平均从423ms变为120ms。其他优化也可能会加快速度。

现在主要的事情:

你的代码开始由左到右,然后在每一个每列行读取列。最终的结果是您的结果11100010101010....数据看起来像逆时针旋转90度的图片。

希望你能朝正确的方向发展。