qimage类中的scanline函数

时间:2011-12-03 02:44:56

标签: c++ qt qimage scanline

我正在开发用于编辑光栅图形的应用程序。在这个应用程序中,我必须创建扫描线功能,它将与QImage类中的扫描线功能相同。 但是我对扫描线功能的工作方式和扫描线一般都很困惑。 例如,当我为高度为177px的图像调用bytesPerLine()时,我期望该值为531(每个像素为3个字节),但此函数返回520?

另外,当我使用时   uchar data = image->scanLine(y)[x] 对于R = 249 G = 249 B =可变数据中的249值是255。 我真的不明白这个价值。 在此先感谢:)

1 个答案:

答案 0 :(得分:1)

为了获得可靠的行为,您应该检查QImage::format()的返回值,以便在访问原始图像数据之前查看使用的基础格式。

对于真彩色,Qt似乎更喜欢RGB32 / ARGB32格式,其中每个像素占用4个字节,无论是否存在Alpha通道(对于RGB32格式,它只是填充了0xff)。如果你加载一个真彩色图像,它可能是这两种格式之一。

此外,不同平台的字节顺序可能不同,请尽可能使用QRgb访问32位像素。

顺便说一句,扫描线不应该是水平的吗?我认为您应该使用width()代替height()来计算扫描线的长度。