将字符串数据转换为二进制图像
问题描述:
我正在使用Qt,我是Qt的新手。我从特定端口的服务器获取字符串数据流。将字符串数据转换为二进制图像
我收到1和0。每次我接收这样一行
1111110001111111111111111111100000000000011111111111
得到n
次数我需要从数据创建二值图像文件之后。白色为1
,黑色为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))
}
}
}
答
- 你必须知道你的图像的尺寸(例如
NxM
) - 根据图像的尺寸,你必须分析字符串你得到了什么(想就怎么写正确的周期,以获得从一维数组
NxM
二维数组由NxM
元素组成)。 - 对于保存图像数据,您可以使用
QImage
类。创建QImage
对象,传递给构造函数height
和width
,使用其方法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;
}
你知道图像尺寸吗? – 2013-03-14 07:46:43
是的。 500x500图片需要构建 – Saravanan 2013-03-14 08:03:32