gpt4 book ai didi

c++ - 如何在 QImage 中显示此数据缓冲区

转载 作者:行者123 更新时间:2023-11-28 08:22:21 26 4
gpt4 key购买 nike

我想在 QImage 中显示一张图片。

这是填充行*列图像的代码片段:

    rgbMapped[row][col * 3] = red;

rgbMapped[row][col * 3 + 1] = green;

rgbMapped[row][col * 3 + 2] = blue;

如您所见,我的数据缓冲区是“行高”和“列*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,它允许我拦截一些鼠标事件,但我不想对任何绘图函数或任何东西做任何事情。

当我运行这段代码时,我返回的图像看起来像我的图像,除了有三个拷贝,一个带有绿色调,一个看起来有点黄色,一个带有明显的紫色调。

这似乎是正确的图像,如果这三个数据......相互叠加?

最佳答案

只是一个假设,但根据您提到的(错误的)颜色,我怀疑问题可能出在您关于 char **rgbMapped 变量的分配/初始化代码上。你能发布这个代码吗?

我会尝试在下面写一个可能正确(?)的初始化代码只是给你一个可能有帮助的提示(我还没有编译代码,因此,对于任何语法错误,我深表歉意)。我使用 malloc(),但您也可以使用 new() 运算符。

// allocate a single buffer for all image pixels
unsigned char *imgbuf = malloc(3 * getWidth() * getHeight());

// allocate row pointers
unsigned char **rgbMapped = malloc(getHeight() * sizeof (unsigned char *));

// Initialize row pointers
for (int h=0; h < getHeight(); h++)
{
*rgbMapped[h] = &imgbuf[h * 3 * getWidth()];
}

// ... do your processing

// Free the image buffer & row pointers
free(imgbuf);
imgbuf = NULL;
free(rgbMapped);
rgbMapped = NULL;

重要的部分是行指针的初始化(你忘了*3吗?)。只是我的 2c。

关于c++ - 如何在 QImage 中显示此数据缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5343846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com