![](/img/trans.png)
[英]Rendering a QGraphicsScene to QImage results in objects being placed on a side of QImage
[英]QImage::Format_mono to .png and QGraphicsScene
我創建了一個QImage
格式QImage::Format_Mono
。 當我嘗試並顯示該圖像到QGraphicsView
通過QGraphicsScene
視圖不變。 所述QImage
被加載到使用現場QPixmap
通過產生QPixmap::fromImage()
函數。 我也嘗試使用保存功能將QPixmap
保存為PNG / JPG / BMP也無濟於事。 基本代碼結構如下:
QGraphicsView *view = new QGraphicsView();
QGraphicsScene *scene = new QGraphicsScene();
view.setScene(scene);
QImage img(size,QImage::Format_Mono);
QVector<QRgb> v;
v.append(Qt::color0); // I have tried using black and white
v.append(Qt::color1); // instead of color0 and 1 as well.
img.setColorTable(v);
// Do some stuff to populate the image using img.setPixel(c,r,bw)
// where bw is an index either 0 or 1 and c and r are within bounds
QPixmap p = QPixmap::fromImage(img);
p.save("mono.png");
scene->addPixmap(p);
// Code to display the view
如果我改為制作QImage::Format_RGB888
的圖像並用黑色或白色填充像素,則PNG / View會正確顯示。
如何更新我的代碼以在QGraphicsView
顯示QImage
?
錯誤是Qt::GlobalColor
(例如Qt::white
或Qt::color0
)是QColor
類型,而不是預期的QRgb
。 ( QRgb
是unsigned int的typedef)
您可以使用QColor::rgb()
方法將QColor
轉換為QRgb
,或使用全局方法qRgb(r,g,b)
直接創建QRgb
。 下面是一個完整的工作示例來說明,無論mono
是true
還是false
,它都會顯示(並保存為PNG)非常精確的圖像。
#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QGraphicsView *view = new QGraphicsView();
QGraphicsScene *scene = new QGraphicsScene();
view->setScene(scene);
int W = 100;
int H = 100;
QImage img;
uint color0 = qRgb(255,0,0);
uint color1 = Qt::green.rgb();
bool mono = true;
if(mono)
{
img = QImage(QSize(W,H),QImage::Format_Mono);
QVector<QRgb> v; v << color0 << color1;
img.setColorTable(v);
for(int i=0; i<W; i++)
for(int j=0; j<H; j++)
{
uint index;
if(j-(j/10)*10 > 5)
index = 0;
else
index = 1;
img.setPixel(i,j,index);
}
}
else
{
img = QImage(QSize(W,H),QImage::Format_RGB888);
for(int i=0; i<W; i++)
for(int j=0; j<H; j++)
{
uint color;
if(j-(j/10)*10 > 5)
color = color0;
else
color = color1;
img.setPixel(i,j,color);
}
}
QPixmap p = QPixmap::fromImage(img);
p.save("mono.png");
scene->addPixmap(p);
view->show();
return app.exec();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.