uchar * QImage::bits()
返回指向第一个像素数据的指针。这相当于scanLine(0)。
注意,QImage使用隐式数据共享。这个函数执行共享像素数据的深度拷贝,从而确保这个QImage是唯一使用当前返回值的QImage。
按照Qt手册的说明,可以直接使用指针访问图像的内存数据。例如设定图片格式为QImage::Format_ARGB32_Premultiplied。
QImage::Format_ARGB32_Premultiplied
图像使用预相乘的32位ARGB格式(0xAARRGGBB)存储,即红、绿、蓝通道乘以alpha分量除以255。(如果RR、GG或BB的值高于alpha通道,则结果未定义。)某些操作(例如使用alpha混合的图像合成)使用预乘ARGB32比使用普通ARGB32更快。
图像从地址高位向低位存储ARGB,如果对图片整张渲染某个颜色,实例代码如下:
QImage image(100, 100, QImage::Format_ARGB32_Premultiplied);
uchar * data = image.bits();
QColor color = Qt::blue;
uchar a = color.alpha();
uchar r = color.red() * a / 255.f;
uchar g = color.green() * a / 255.f;
uchar b = color.blue() * a / 255.f;
int pixels = image.width() * image.height();
for(int i = 0; i < pixels; ++i){
*(data + 3) = a;
*(data + 2) = r;
*(data + 1) = g;
*(data) = b;
data += 4;
}