我正在使用Qt而且我是Qt的新手。我从特定端口的服务器获取字符串数据流。
每次收到这样的一行
,我收到1和01111110001111111111111111111100000000000011111111111
获得n
次后,我需要从数据中创建二进制图像文件。 1
表示白色,0
表示黑色。
怎么做?我已经实现了接收数据,但我不知道如何将这些数据转换为图像。
请帮我找到解决此问题的方法。
答案 0 :(得分:1)
NxM
)NxM
元素的1D数组中获取NxM
2D数组。)QImage
课程。创建QImage
对象,传递给构造函数height
和width
,将其方法用于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;
}