首页 > 技术文章 > vc图像合成

xydblog 2014-04-04 11:00 原文

本程序下载地址:

  上一篇讲述了tiff格式图片拆分成多张图片, 这篇博客讲述如何把多张任意格式的图片合成为一张图片。

  图像合成仍然需要借助Cximage图像库,合成函数为Mixfrom, 函数原型为:

void MixFrom(CxImage & imagesrc, long lXOffset, long lYOffset);

  其中imagesrc表示原图, lXOffset,lYOffset表示原图需要被合成到目标图像的哪个位置。

 例如:

    //合成图片
    ImageDes.MixFrom(ImageSrc1, 0, 0);
    ImageDes.MixFrom(ImageSrc2, nSrc1Width, 0);

    //保存合成图片
    ImageDes.Save("D:\\Compoud.jpg", CXIMAGE_FORMAT_JPG);

在这个例子中,把原图1合成到目标图片的左边,把原图2合成到目标图片的右边,合成后的图片保存到D盘,合成后的效果图如下:

下面是这个程序的完整代码:
 1 //图像合成响应函数
 2 void CMyDlg::OnBtnMinfrom() 
 3 {
 4     // TODO: Add your control notification handler code here
 5     CxImage ImageDes;
 6     CxImage ImageSrc1;
 7     CxImage ImageSrc2;
 8     
 9     //原图1宽高
10     int nSrc1Width = 0;
11     int nSrc1High = 0;
12 
13     //原图2宽高
14     int nSrc2Width = 0;
15     int nSrc2High = 0;
16 
17     //合成后的图片宽高
18     int nDesWidth = 0; 
19     int nDesHigh = 0;
20 
21     //加载图片1图片2
22     ImageSrc1.Load("D:\\001.jpg");
23     ImageSrc2.Load("D:\\002.jpg");
24 
25     //图片1宽高
26     nSrc1Width = ImageSrc1.GetWidth();
27     nSrc1High = ImageSrc1.GetHeight();
28     
29     //图片2宽高
30     nSrc2Width = ImageSrc2.GetWidth();
31     nSrc2High = ImageSrc2.GetHeight();
32 
33     //合成后的图片宽
34     nDesWidth = nSrc1Width + nSrc2Width;
35 
36     //合成后的图片高(水平合成,所以宽为图片1和图片2之和, 高为图1和图2的最大者)
37     if(nSrc1High < nSrc2High)
38     {
39         nDesHigh = nSrc2High;
40     }
41     else
42     {
43         nDesHigh = nSrc1High;
44     }
45     
46     //合成后图片的位数,通常为24位
47     int nBppCnt = ImageSrc1.GetBpp();
48 
49     //创建一个合成图片后的大小
50     ImageDes.Create(nDesWidth, nDesHigh, nBppCnt);
51 
52     //合成图片
53     ImageDes.MixFrom(ImageSrc1, 0, 0);
54     ImageDes.MixFrom(ImageSrc2, nSrc1Width, 0);
55 
56     //保存合成图片
57     ImageDes.Save("D:\\Compoud.jpg", CXIMAGE_FORMAT_JPG);
58 
59 }

 

推荐阅读