2013-06-02 148 views
0

看起來這很容易,但在CImg中使用draw_image()函數時遇到了很多問題。這裏是一個代碼段:)用CImg覆蓋圖像

CImg<unsigned char> landingScreen("desertSunset.bmp"), newGameBTN("newgame.pgm"); 
CImgDisplay main_disp(landingScreen,"Main Window"); 
landingScreen.draw_image(400,400,newGameBTN); 

我曾嘗試用於draw_image重載函數(約8,都沒有用。當我運行程序時,主窗口會彈出我的desertSunset圖像,但就是這樣。我試圖在landingScreen上放置newgame.pgm,但圖像不顯示。這是深度問題,還是我構建文件的方式?我已經瀏覽了CImg的一些不同的示例文件,但它們並不是非常有用,而且這些函數的文檔最多也是最少的。如果有人能夠給出一個'Hello World'的例子來說明如何在圖像上繪製圖像,或者告訴我我做錯了什麼,我將不勝感激。謝謝!

回答

0

圖紙後,您需要刷新顯示窗口,以及:

landingScreen.diplay(main_disp); 

顯示窗口被刷新時,您選擇。它不是由一些正在運行的線程自動完成的。

+0

我補充說,但它仍然無法正常工作。我得到draw_circle()工作得很好,但draw_image()仍然沒有做任何事情。 – user2446036

0

CImg.draw_image函數不覆蓋圖像。它取代了像素。 有多種方法可以進行圖像疊加和alpha合成,並且需要手動實現它們(例如,Multiply,Overlay,...)。

對於正常alpha混合,這是你如何計算每個像素:

A = srcA表示+ DSTA(1 - srcA表示)
R =(SRCR * srcA表示+ DSTR * DSTA *(1 - srcA表示))/ A
G =(SRCG * srcA表示+ DSTG * DSTA *(1 - srcA表示))/ A
B =(SRCB * srcA表示+ DSTB * DSTA *(1 - srcA表示))/ A

0

我用ImageMagick創建了兩個這樣的圖像:

convert -size 400x300 gradient:red-black PNG24:gradient.png 

enter image description here

convert -size 100x100 xc:yellow overlay.png 

enter image description here

然後跑到這個CImg代碼:

#define cimg_use_png 
#define cimg_display 0 
#include "CImg.h" 
using namespace cimg_library; 
int main() { 
    CImg<unsigned char> gradient("gradient.png"); 
    CImg<unsigned char> overlay("overlay.png"); 
    gradient.draw_image(80,150,overlay); 
    gradient.save_png("result.png"); 
} 

,並得到這樣的:

enter image description here