上一篇讲述了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 }