我正在开发用于编辑光栅图形的应用程序。在此应用程序中,我必须创建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()来计算扫描线的长度。

10-08 09:44