显示此数据缓冲区我有我试图在QImage的显示图像。如何在QImage的
这是代码填充行*的cols图像的片段:
rgbMapped[row][col * 3] = red;
rgbMapped[row][col * 3 + 1] = green;
rgbMapped[row][col * 3 + 2] = blue;
正如你所看到的,我的数据缓冲区是“行高”是“的cols * 3范围的”
rgbMapped是一个无符号char **数组。所以,早在我的QT代码,我有以下几点:
QImage *qi = new QImage(getWidth(), getHeight(), QImage::Format_RGB888);
for (int h = 0; h< getHeight(); h++){
memcpy(qi->scanLine(h), rgbMapped[h], getWidth()*3);
}
QPixmap p(QPixmap::fromImage(*qi,Qt::ColorOnly));
if(scene.items().contains(item)){
scene.removeItem(item);
}
item = new ImagePixmapItem(p);
scene.addItem(item);
ui->graphicsView->setScene(&scene);
ui->graphicsView->show();
ImagePixMapItem的是,我已经创建了让我来拦截一些鼠标事件QGraphicsPixmapItem,但我dindt做anyhting与任何涂料的功能或任何东西。
当我运行此代码时,我的回归图像看起来像我的图像,除了有三个副本,一个具有绿色色调,一个看起来像黄色,另一个具有明显的紫色色调。
看起来也许这将是正确的形象,如果这三个数据的相互were..overlayed?
4个字节 - 我试图简化测试用例和图像保存到文件中,而不是或使用QPainter直接绘制。只是为了确保QImage-QPixmap转换或graphicsview没有任何问题。 - 我的第一个猜测是,行和列会混淆不清。 – 2011-03-17 21:04:39
3副本,你的意思是你有3个相同的图像水平或垂直挤压成相同大小的图像?或者结果是它假定的宽度或高度的3倍? – 2011-03-18 01:29:50
它应该是3倍的宽度。我认为这部分可能是因为我的getHeight()和getWidth()返回数组的维数。那应该是图像的尺寸吗? – Derek 2011-03-18 15:28:23