2.图像合成技术
图像合成技术很重要,其实质是操作将两幅或两幅以上的图像,将它们的信息融合在一起,产生1+1>2的效果。我们在进行图像合成的时候可以采用Alpha值的方法,下面来看一下如何利用Alpha值来合成两张图片。
采用Alpha图象合成的方法,就是最终合成的图象的各点像素值是由用来制作合成图的两张图片的相应点的像素值按一定比例混合而成的,这个比例由Alpha值决定,具体算式如下:
resultPixe= (pixel1*(255-Alpha)+pixel2*Alpha)/255; // Alpha取值范围从0到255 |
上面的算式中,pixel1代表图像1的当前像素点的灰度值,pixel2代表图像2的当前像素点的灰度值,Alpha可以看作两个像素在最终合成的结果中所占的权重。可以看出,只要修改Alpha的值,就可以改变合成后的图象中用来合成的两张图片各自所占的比值,改变合成后的显示效果。我们可以利用这个方法,按一定的时间间隔修改Alpha的值、这样就可以很轻易的制作出生动的淡入淡出效果、实现两幅图片间的平滑过度效果。下面给出一个制作合成图的具体源码:
BOOL CompoundImage(HANDLE HDib1,HANDLE HDib2,int alpha) { BYTE lpData1,lpData2; // 源图象2的信息 //由于待合成的两个图象的格式、大小是一样的,所以我只获取一个图像文件的图像信息就可以了。 LPBITMAPINFO lpBi=(LPBITMAPINFO)HDib2; // 计算图象数据偏移量 lpData2=(LPVOID)((LPBYTE)lpBi->bmiColors+256*sizeof(RGBQUAD)); //获取源图像2的图像数据; lpBi=(LPBITMAPINFO)HDib1; lpData1=(LPVOID)((LPBYTE)lpBi->bmiColors+256*sizeof(RGBQUAD)); //通过alpha值合并两张图象的像素值 for ( int i=0;i< lpBi->biWidth; i++ ) for(int j=0;j< lpBi->biHeight;j++ ) { //套用alpha图像混合公式; *(lpData1+i*WIDTHBYTES(lpBi->biWidth*8)+j)=(*(lpData1+i*WIDTHBYTES(lpBi->biWidth*8)+j)*(255-alpha)+ *(lpData2+i*WIDTHBYTES(lpBi->biWidth*8)+j)*alpha)/255; } return lpData1; } |
以上内容我们主要是讲述了alpha图像混合的实现原理和方法,其实读者大可不必自己写这么多代码,微软给我们提供了一个名为AlphaBlend()的函数,它就可以直接实现图像合成的功能,具体怎么使用,还请读者参考MSDN。
|