QT-QImage像素操作

QT-QImage像素操作,image,qt4,getpixel,Image,Qt4,Getpixel,我正在构建一个QtGUI应用程序,并使用QImage打开图像。 我的问题是我不知道如何使用QImage的bit()和scanline() 在每像素级别访问的方法 我看过这篇文章 但这仅适用于每行的第一个像素。这是对的还是我全错了 提前感谢对应于图像的高度,列对应于图像的宽度 根据文档,原型看起来像uchar*QImage::scanline(inti),或者类似的const版本 但是,正如一位评论者所指出的,由于数据依赖于机器架构和映像,因此您不应该直接使用uchar*。相反,请使用以下方法:

我正在构建一个QtGUI应用程序,并使用QImage打开图像。 我的问题是我不知道如何使用QImage的bit()和scanline() 在每像素级别访问的方法

我看过这篇文章 但这仅适用于每行的第一个像素。这是对的还是我全错了

提前感谢

对应于图像的高度,列对应于图像的宽度

根据文档,原型看起来像
uchar*QImage::scanline(inti)
,或者类似的
const
版本

但是,正如一位评论者所指出的,由于数据依赖于机器架构和映像,因此您不应该直接使用
uchar*
。相反,请使用以下方法:

QRgb *rowData = (QRgb*)img.scanLine(row);
QRgb pixelData = rowData[col];
int red = qRed(pixelData);

从Kaleb的帖子中可能看不出这一点,但以下内容适用于在RGB32格式的图像上设置像素

// Get the line we want
QRgb *line = (QRgb *)image->scanLine(row_index);

// Go to the pixel we want
line += col_index;

// Actually set the pixel
*line = qRgb(qRed(color), qGreen(color), qBlue(color));

这个答案对我不起作用。看起来,数据在我的系统上没有32位对齐。 为了获得正确的数据,我必须在我的系统上执行以下操作:

for(uint32_t Y = 0; Y < mHeight; ++Y)
{
    uint8_t* pPixel = Image.scanLine(Y);

    for(uint32_t X = 0; X < mWidth; ++X)
    {
      const int Blue = *pPixel++;
      const int Green = *pPixel++;
      const int Red = *pPixel++;

      uint8_t GrayscalePixel = (0.21f * Red) + (0.72f * Green) + (0.07 * Blue);
    }
}
用于(uint32_t Y=0;Y { uint8_t*pPixel=图像扫描线(Y); 对于(uint32_t X=0;Xoopps!!很抱歉在发布了这个问题后,我在QT论坛上找到了它,答案是:for(quint32y=0;y