日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

qt设置文本背景透明_Qt修改图片的背景色及设置背景色为透明的方法

發(fā)布時(shí)間:2025/4/5 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qt设置文本背景透明_Qt修改图片的背景色及设置背景色为透明的方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

先上干貨。

Qt下修改圖片背景色的方法:

方法一:

QPixmap CKnitWidget::ChangeImageColor(QPixmap sourcePixmap, QColor origColor, QColor destColor)

{

QImage image = sourcePixmap.toImage();

for(int w = 0;w < image.width();++w)

for(int h = 0; h < image.height();++h)

{

QRgb rgb = image.pixel(w,h);

if(rgb == origColor.rgb())

{

///替換顏色

image.setPixel(w,h,destColor.rgba());

}

}

return QPixmap::fromImage(image);

}

這是非常暴力的方法,但是非常有用,經(jīng)測(cè)試,位深度24及以上的圖片都能被修改。

方法二:

QPixmap Widget::ChangeImageColor(QPixmap sourcePixmap, QColor origColor, QColor destColor)

{

QImage image = sourcePixmap.toImage();

uchar * imagebits_32;

for(int i =0; i

{

imagebits_32 = image.scanLine(i);

for(int j =0; j < image.width(); ++j)

{

int r_32 = imagebits_32[j * 4 + 2];

int g_32 = imagebits_32[j * 4 + 1];

int b_32 = imagebits_32[j * 4];

if(r_32 == origColor.red()

&& g_32 == origColor.green()

&& b_32 == origColor.blue())

{

imagebits_32[j * 4 + 2] = (uchar)destColor.red();

imagebits_32[j * 4 + 1] = (uchar)destColor.green();

imagebits_32[j * 4] = (uchar)destColor.blue();

}

}

}

return QPixmap::fromImage(image);

}

相對(duì)開銷小一點(diǎn)的方法,但在圖片量不大的情況下,CPU處理起來(lái)都挺快。

原理都是替換指定像素區(qū)域的色碼,但是Qt文檔推薦方法一,相對(duì)開銷較小。具體原理還有很多的,先貼出來(lái),跟大家一起學(xué)習(xí)。有時(shí)候方法一無(wú)效,但是方法二有效,都可以試試。

圖片背景色設(shè)為透明的方法:

///將指定圖片的指定顏色扣成透明顏色的方法

QImage Widget::ConvertImageToTransparent(QImage image/*QPixmap qPixmap*/)

{

image = image.convertToFormat(QImage::Format_ARGB32);

union myrgb

{

uint rgba;

uchar rgba_bits[4];

};

myrgb* mybits =(myrgb*) image.bits();

int len = image.width()*image.height();

while(len --> 0)

{

mybits->rgba_bits[3] = (mybits->rgba== 0xFF000000)?0:255;

mybits++;

}

return image;

}

原理其實(shí)就是設(shè)置圖片的alpha通道為0,即全透明。

這里有個(gè)注意點(diǎn):

如果需要保存透明圖片要注意選用支持alpha通道的圖片格式,一般選用png格式。

歡迎各位指正,順便吐槽下,這個(gè)寫博客的功能真的很難受,有的字打不上來(lái),但是可以粘貼上來(lái)。。

總結(jié)

以上是生活随笔為你收集整理的qt设置文本背景透明_Qt修改图片的背景色及设置背景色为透明的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。