QImage bits() 原始图像处理

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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值