2013-06-02 4 views
0

Кажется, это было бы очень легко, но у меня возникло много проблем с использованием функции draw_image() в CImg. Вот фрагмент кода:Наложение изображений с помощью CImg

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

Я попытался около 8 перегруженных функций для draw_image(), все безрезультатно. Когда я запускаю программу, Главное окно появляется с моим изображением desertSunset, но это все. Я пытаюсь заложить newgame.pgm поверх screenScreen, но изображение не появляется. Это проблема с глубиной, или, может быть, способом структурирования файла? Я просмотрел кучу разных файлов примеров для CImg, но они не очень полезны, и документация по этим функциям в лучшем случае минимальна. Если кто-то может дать пример «Hello World», как рисовать изображение по изображению или сказать мне, что я делаю неправильно, я был бы очень признателен. Благодаря!

ответ

0

После рисования, вам нужно обновить окно дисплея, а также:

landingScreen.diplay(main_disp); 

Вы выбираете, когда окно дисплея обновляется. Некоторые выполняемые потоки выполняются автоматически.

+0

Я добавил это, но он все еще не работает. Я получил draw_circle(), чтобы работать нормально, но draw_image() все еще ничего не делает. – user2446036

0

Функция CImg.draw_image не накладывает изображения. Он заменяет пиксели. Существует несколько способов сделать наложение изображений и альфа-компоновку, и их необходимо выполнить вручную (например, Multiply, Overlay, ...).

Для нормальной альфа-смешивание, это, как вы рассчитать каждый пиксель:

А = Srca + dstA (1 - Srca)
R = (srcR * Srca + Dstr * dstA * (1 - Srca))/А
G = (srcG * Srca + dstG * dstA * (1 - Srca))/А
В = (srcB * Srca + DSTB * dstA * (1 - Srca))/А

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

Смежные вопросы