gpt4 book ai didi

c++ - 无法通过 setPixel 正确填充 QImage

转载 作者:行者123 更新时间:2023-11-28 07:46:17 28 4
gpt4 key购买 nike

我需要将 QImage 转换为一个数组,其中每个像素由三个整数( channel )表示。所以我试图用填充代码来实现这一点:

void Processor::init(QImage *image){
QColor* c = new QColor();

int i,j;
int local_ind;

x = image->width();
y = image->height();

if(this->img!=NULL)
delete [] this->img;
this->img = new int[ x * y * 3];

for( i = 0 ; i < y ; i++ )
for( j = 0 ; j < x ; j++ ){
c->setRgb(image->pixel(j, i));
local_ind = i * x + j * 3;
this->img[local_ind + 0] = c->red();
this->img[local_ind + 1] = c->green();
this->img[local_ind + 2] = c->blue();
}
delete c;
}

void Processor::flush(QImage *image){

QColor* c = new QColor();
QRgb color;

int i, j;
int local_ind;

for( i = 0 ; i < y ; i++ )
for( j = 0 ; j < x ; j++ ){

local_ind = i * x + j * 3;
color = qRgb(this->img[local_ind + 0],
this->img[local_ind + 1],
this->img[local_ind + 2]);

image->setPixel(j, i, color);
}

delete c;
}

这两个函数似乎都工作正常,正如我通过调试器看到的那样,但是当我一个接一个地调用它们时(只需将信息从 QImage 复制到数组并向后复制),结果有点奇怪。整个图像由三个重复图像组成:原始图像的三分之一(源图像的蓝色、绿色和红色 channel )。我想我只是以错误的方式使用了 setPixel,所以 QImage 的格式没有被观察到或 smth。

我使用 QImage RGB32 格式,如果它真的很重要的话。

附言。抱歉我的英语不好,欢迎指正)

最佳答案

问题是你正在使用

 local_ind = i * x + j * 3;

但在您的缓冲区中,每个像素占用 3 个字节。所以你需要改用

 ( i * x + j ) * 3

顺便说一句:为什么使用 x 作为高度,使用 y 作为宽度?这不直观。

关于c++ - 无法通过 setPixel 正确填充 QImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14821878/

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