用CImg覆盖图像

时间:2013-06-02 22:25:01

标签: image cimg

看起来这很容易,但我在CImg中使用draw_image()函数时遇到很多问题。这是一段代码:

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图像,但就是这样。我试图在landingScreen上放置newgame.pgm,但图像没有显示出来。这是深度问题,还是我构建文件的方式?我已经查看了CImg的一些不同的示例文件,但它们不是很有帮助,并且关于这些函数的文档充其量是最小的。如果有人可以给出一个“Hello World”示例,说明如何在图像上绘制图像,或者告诉我我做错了什么,我将非常感激。谢谢!

2 个答案:

答案 0 :(得分:1)

我使用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

答案 1 :(得分:0)

绘图后,您还需要刷新显示窗口:

landingScreen.diplay(main_disp);

您可以选择刷新显示窗口的时间。它不是由一些正在运行的线程自动完成的。