我正在使用 Qt,我是 Qt 的新手。我正在从特定端口的服务器获取字符串数据流。
我收到 1 和 0。每次我收到这样的一行
1111110001111111111111111111100000000000011111111111
在获得n
多次后,我需要从数据中创建二进制图像文件。1
为白色和0
黑色。
这该怎么做?我已经实现了接收数据,但我不知道如何将此数据转换为图像。
请帮助我找到解决此问题的方法。
我正在使用 Qt,我是 Qt 的新手。我正在从特定端口的服务器获取字符串数据流。
我收到 1 和 0。每次我收到这样的一行
1111110001111111111111111111100000000000011111111111
在获得n
多次后,我需要从数据中创建二进制图像文件。1
为白色和0
黑色。
这该怎么做?我已经实现了接收数据,但我不知道如何将此数据转换为图像。
请帮助我找到解决此问题的方法。
NxM
)NxM
从一维数组中获取二维数组NxM
)。QImage
类。创建QImage
对象,传递给构造函数height
和width
,使用它的方法来fill
成像。要设置像素的某些颜色,可以使用QImage
s 方法setPixel ( int x, int y, uint index_or_rgb )
。就这样。祝你好运!
来自 Qt 文档:“因为 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);
您可以尝试这样做
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))
}
}
}
感谢我创建图像的帮助。这里我的代码
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;
}