2014-03-03 42 views
1

我在Qt中的視頻上覆蓋了一個透明圖像(QImage)。我只想在點擊按鈕時更改透明圖像的顏色。有人能告訴我如何做到這一點?在Qt中更改透明圖像的顏色

謝謝。

+1

有2幅圖像,並將它們 –

+0

之間交換但我要的顏色設置不同的範圍。它不需要是固定的顏色。如果是這種情況,那麼可以做些什麼? – Sid411

+0

「改變顏色」是什麼意思? – Mitch

回答

6

這可以通過很多方式完成。我建議使用QPainter來創建新圖像。如果您設置了SourceIn合成模式,則起始圖像的Alpha通道將應用於您將執行的任何繪製。你只需要用想要的顏色填充圖像。

QPixmap source_image; // should be preserved in a class member variable 
QRgb base_color; // desired image color 

QPixmap new_image = source_image; 
QPainter painter(&new_image); 
painter.setCompositionMode(QPainter::CompositionMode_SourceIn); 
painter.fillRect(new_image.rect(), base_color); 
painter.end(); 

ui->label->setPixmap(new_image); // showing result 

請注意,我用QPixmap代替QImage因爲QPixmap s爲更有效地顯示(也可能是油漆)。如果您由於某種原因仍想使用QImage,則此代碼將與QImage一起使用,不做任何更改(當然不包括最後一行)。

圖片來源:source image             結果:result

+0

我試過這種方法。這是說不能用QImage :: Format_Indexed8格式在圖像上繪製。 這是因爲它是一個PNG透明圖像。 – Sid411

+0

我試過使用image-> setColor,因爲它是一個format8圖像。在這種情況下,它甚至可以繪製透明的區域。我只想要非透明部分採取顏色。 謝謝 – Sid411

+1

索引8格式不是透明度所必需的。 ARGB32格式是常用的。使用'source_image = source_image.convertToFormat(QImage :: Format_ARGB32);'將圖像轉換爲可繪製格式。 –