QT QImage像素操作

the*_*sem 14 image qt4 getpixel

我正在构建一个QT GUI应用程序并使用QImage打开图像.我的问题是我无法弄清楚如何使用QImage的bit()和scanline()方法来获得每像素级别的访问权限.

我已经看到这个Qt QImage像素操作问题, 但这仅适用于每一行的第一个像素.这是对的还是我错了?

提前致谢

Kal*_*son 14

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

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

但是,作为一个评论者指出的那样,因为数据是依赖于机器架构和形象,你应该使用uchar *直接.相反,请使用以下内容:

QRgb *rowData = (QRgb*)img.scanLine(row);
QRgb pixelData = rowData[col];
int red = qRed(pixelData);
Run Code Online (Sandbox Code Playgroud)

  • -1:注意!由于这个答案甚至在官方Qt-API文档之前就出现在谷歌搜索中,我认为一句警告是恰当的.您不能使用[row] [col]来访问像素数据,因为[col]会选择一个uchar,而像素数据非常依赖于每像素位格式.请参阅官方文档中的警告"您不能直接使用uchar*指针,因为像素格式取决于底层平台上的字节顺序.使用qRed(),qGreen(),qBlue()和qAlpha()来访问像素." http://qt-project.org/doc/qt-4.8/qimage.html#scanLine (11认同)

Lev*_*viX 13

从Kaleb的帖子中可能不会立即显而易见,但以下内容适用于在Format_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));
Run Code Online (Sandbox Code Playgroud)