将字符串数据转换为二进制图像

时间:2013-03-14 03:28:11

标签: string image qt image-processing

我正在使用Qt而且我是Qt的新手。我从特定端口的服务器获取字符串数据流。

每次收到这样的一行

,我收到1和0
1111110001111111111111111111100000000000011111111111

获得n次后,我需要从数据中创建二进制图像文件。 1表示白色,0表示黑色。

怎么做?我已经实现了接收数据,但我不知道如何将这些数据转换为图像。

请帮我找到解决此问题的方法。

4 个答案:

答案 0 :(得分:1)

  • 您必须知道图片的尺寸(例如NxM
  • 根据图像的尺寸,你必须解析你得到的字符串(想想如何编写正确的周期以从包含NxM元素的1D数组中获取NxM 2D数组。)
  • 要保存图像数据,您可以使用QImage课程。创建QImage对象,传递给构造函数heightwidth,将其方法用于fill图像。要设置某些像素颜色,您可以使用QImage方法setPixel ( int x, int y, uint index_or_rgb )

多数民众赞成。祝你好运!

答案 1 :(得分:0)

来自Qt docs: “因为QImage是QPaintDevice的子类,所以可以使用QPainter直接绘制到图像上。”

因此,您可以创建大小为500x500的QImage

QImage image = QImage(500,500)

然后在此图片上绘图

QPainter p(&image);
p.drawPoint(0,0);
p.drawPoint(0,1);
etc;

另一种方法是将您的位流保存到数组char []中,然后使用Format_Mono或Format_MonoLSB格式创建QImage。

QImage image = QImage(bitData, 500, 500, Format_Mono);

答案 2 :(得分:0)

您可以尝试这样做

    QImage Image(500,500, QImage::Format_Indexed8);
    for(int i=0;i<500/*image_width*/;i++)
    {
        for(int j=0;j<500/*image_height*/;j++)
        {
            QRgb value;
            if(data[i*j] == 0)/*the data array should contain all the information*/
            {
                value = qRgb(0,0,0);
                Image.setPixel(i,j,qGray(value))
            }
            else
            {
               value = qRgb(255,255,255);
               Image.setPixel(i,j,qGray(value))
            }
      }
   }

答案 3 :(得分:0)

谢谢你的帮助我创建了图像。我的代码

QImage testClass::GetImage(QString rdata, int iw, int ih)
{
    QImage *Image=new QImage(iw,ih,QImage::Format_ARGB32);
    for(int i=0;i<ih;i++)
    {
        for(int j=0;j<iw;j++)
        {
            if(rdata.at((i*iw)+j) == '0')
                Image->setPixel(QPoint(j,i),qRgb(0,0,0));
            else
               Image->setPixel(QPoint(j,i),qRgb(255,255,255));
        }
   }
    return *Image;
}