【发布时间】:2011-12-03 02:44:55
【问题描述】:
我正在开发用于编辑光栅图形的应用程序。在这个应用程序中,我必须创建与 QImage 类中的扫描线函数相同的扫描线函数。 但我对扫描线功能的工作方式以及一般的扫描线有点困惑。 例如,当我为高度为 177px 的图像调用 bytesPerLine() 时,我期望该值为 531(每个像素 3 个字节),但此函数返回 520?
另外,当我使用
uchar data = image->scanLine(y)[x]
对于 R=249 G=249 B=249 变量数据中的值为 255。
我真的不明白这个价值。
在此先感谢:)
【问题讨论】:
-
我希望每个像素是 4 个字节,RGBA,255 可能是 alpha 通道。检查接下来的两个字节。
-
跟进,你知道
QImage是用什么Format构造的吗?这直接影响每个给定像素的字节大小和格式。从文档中:> 如果您正在访问 32-bpp 图像数据,请将返回的指针转换为 QRgb*(QRgb 具有 32 位大小)并使用它来读取/写入像素值。您不能直接使用 uchar* 指针,因为像素格式取决于底层平台上的字节顺序。使用 qRed()、qGreen()、qBlue() 和 qAlpha() 访问像素。 -
@EvanTeran:QImage 是用 Format_RGB32 格式构建的。我知道我必须将返回指针转换为 qRgb 但我有兴趣在不转换的情况下访问颜色。从 image->scanLine(y)[x] 返回的值我无法理解访问了哪个颜色值。