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

问题描述:

我正在使用Qt,我是Qt的新手。我从特定端口的服务器获取字符串数据流。将字符串数据转换为二进制图像

我收到1和0。每次我接收这样一行

1111110001111111111111111111100000000000011111111111 

得到n次数我需要从数据创建二值图像文件之后。白色为1,黑色为0

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

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

+0

你知道图像尺寸吗? – 2013-03-14 07:46:43

+0

是的。 500x500图片需要构建 – Saravanan 2013-03-14 08:03:32

您可以尝试做这样

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)) 
      } 
     } 
    } 

  • 你必须知道你的图像的尺寸(例如NxM
  • 根据图像的尺寸,你必须分析字符串你得到了什么(想就怎么写正确的周期,以获得从一维数组NxM二维数组由NxM元素组成)。
  • 对于保存图像数据,您可以使用QImage类。创建QImage对象,传递给构造函数heightwidth,使用其方法fill图像。要设置像素的某种颜色,可以使用QImage的方法setPixel (int x, int y, uint index_or_rgb)

就是这样。祝你好运!

+0

谢谢。我创建了图像并发布了我的代码:) – Saravanan 2013-03-14 11:46:23

来自Qt文档: “因为QImage是一个QPaintDevice子类,QPainter可以用来直接绘制图像。”

所以,你可以创建QImage的尺寸为500×500

QImage image = QImage(500,500) 

,然后这个图像

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

另一种方式是你的比特流保存到数组的char []上绘制简单地创建的QImage格式为Format_Mono或Format_MonoLSB。

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

感谢您的帮助我创建的映像。这里我的代码

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; 
}