题
我建立一个QT GUI应用程序并使用QImage的用于打开图像。 我的问题是,我无法弄清楚如何使用的QImage的位()和扫描线() 方法,以获得在每个像素级别的访问。
我已经看到了这个帖子 Qt的QImage的像素操作的问题 但是这仅仅是每一行的第一个像素。这是正确的还是我理解错了?
由于事先
解决方案
在 scanlines
对应于图像的高度,列对应于所述图像的宽度。
根据该文档,原型看起来像uchar* QImage::scanline(int i)
或类似const
版本。
但是,作为一个评论者指出的那样,因为数据是依赖于机器架构和图像,你应该不会强>直接使用uchar *
。取而代之的是,使用类似下面的:
QRgb *rowData = (QRgb*)img.scanLine(row);
QRgb pixelData = rowData[col];
int red = qRed(pixelData);
其他提示
它可能不是立即显而易见卡莱布的帖子,但以下作品要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));
答案并没有为我工作。它看起来像,数据不是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);
}
}
不隶属于 StackOverflow