我正在开发用于编辑光栅图形的应用程序。在此应用程序中,我必须创建scanline函数,该函数将与QImage类中的scanline函数做同样的事情。
但是我对scanline函数的工作方式以及与scanline的混淆不大。
例如,当我为高度为177px的图像调用bytesPerLine()时,我期望该值为531(每个像素3个字节),但是此函数返回520?
另外,当我使用
uchar data = image->scanLine(y)[x]
对于R = 249 G = 249 B = 249,变量数据中的值为255。
我真的不明白这个价值。
提前致谢 :)
最佳答案
为了获得可靠的行为,在访问原始图像数据之前,应检查QImage::format()
的返回值以查看使用了哪种底层格式。
Qt似乎更喜欢RGB32
/ ARGB32
格式的真彩色,无论是否存在alpha通道,每个像素占用4个字节(对于RGB32
格式,它只是用0xff
填充)。如果加载真彩色图像,则可能采用以下两种格式之一。
此外,字节顺序在各个平台上可能不同,请尽可能使用QRgb
访问32位像素。
顺便说一句,扫描线不应该是水平的吗?我认为您应该使用width()
而不是height()
来计算扫描线的长度。