【问题标题】:convert bitmap to binary data in C#在 C# 中将位图转换为二进制数据
【发布时间】:2013-07-23 14:15:17
【问题描述】:

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

在谷歌搜索的帮助下,我尝试了以下代码 sn-p。

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 要使用,它需要图像的二进制数据作为输入。 现在我得到了一些错误的结果。只需要检查输入是否正确?

【问题讨论】:

  • 我没有任何方法可以在这里看到 SO 可以帮助您,您说您的代码有效,但您的神秘 api 不支持它?至少你需要提到api
  • 你的读图代码没问题。但是实际存在问题的打印图像代码在哪里?你忘了打印行尾'\n'吗?
  • 您确定您的 API 需要一个二进制字符串,例如“0100110101001111111011”吗?还是它要求一个二进制,实际上是一个byte[],数组中的每个字节对应8个像素值?您需要向我们展示 API。
  • 嗨,它是我需要准备的命令之一,并将其​​发送到打印机。他们提到,即使是我得到的指南,也将命令旁边的二进制数据作为字符串传递。可能我必须咨询打印机的技术支持团队,他们会帮助我回答问题。
  • 嗨 Sayse、Tianyun、Jim... 我的任务有两个部分,一是向 API 发送正确的二进制数据,二是确保 API 处理正确。我没有提到 API 的原因是,它基于打印机的命令是可以理解的。类似这样的东西。 (^XA^FO100,100^GFB100,100,,^xz)。由于事情对我不起作用,因此我只能检查二进制数据验证。感谢您的建议,并对我的帖子中未完成的解释感到抱歉。谢谢大家。

标签: c# bitmap bitmapimage


【解决方案1】:

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

  • 你不应该把文件扔到 c:\,虽然那可能只是我的 讨厌鬼。
  • string.Empty,不是string.Empty()
  • 使用 StringBuilder 代替字符串可能会更快。一组简单的优化在 10x10 位图上运行 1,000,000 次,从平均 423 毫秒变为平均 120 毫秒。其他优化也可能会加快速度。

现在最重要的是:

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

希望这会为您指明正确的方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 2018-01-29
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    相关资源
    最近更新 更多