我正在开发用于编辑光栅图形的应用程序。在这个应用程序中,我必须创建扫描线功能,它将与QImage类中的扫描线功能相同。 但是我对扫描线功能的工作方式和扫描线一般都很困惑。 例如,当我为高度为177px的图像调用bytesPerLine()时,我期望该值为531(每个像素为3个字节),但此函数返回520?
另外,当我使用时
uchar data = image->scanLine(y)[x]
对于R = 249 G = 249 B =可变数据中的249值是255。
我真的不明白这个价值。
在此先感谢:)
答案 0 :(得分:1)
为了获得可靠的行为,您应该检查QImage::format()
的返回值,以便在访问原始图像数据之前查看使用的基础格式。
对于真彩色,Qt似乎更喜欢RGB32
/ ARGB32
格式,其中每个像素占用4个字节,无论是否存在Alpha通道(对于RGB32
格式,它只是填充了0xff
)。如果你加载一个真彩色图像,它可能是这两种格式之一。
此外,不同平台的字节顺序可能不同,请尽可能使用QRgb
访问32位像素。
width()
代替height()
来计算扫描线的长度。