当前位置:C++技术网 > 资讯 > GDI+在图形合成中的运用

GDI+在图形合成中的运用

更新时间:2015-12-20 21:34:34浏览次数:1+次

图像合成在日常的图形处理中最为常见,这种技术在PS等专业如那件中得到了很好的支持。
图像合成是通过运算两张图片的像素值,来产生一张新的含有两张图片信息的图像,这一方法在多媒体编程中有着广泛的应用。如果对位图的RGB值进行分解,修改,可以仿威图的色彩信息产生变化,从而进行一些简单的图片修改即合成。GDI+也同样使用了RGB值来表示像素的色彩信息,只不过对色彩信息的含义就加以深化,引入了透明度的概念。透明度是相对于背景而言的,举个例子:在木头上贴黑胶布,黑胶布背后的木材纹理是不会被人看到的,如果在木头上贴红色的透明胶布时,红色胶布后面的木材纹理是隐约可见的,我们称之为透明。在GDI+中,引入了色彩信息的新的表示方法:ARGB表示法。一种颜色的构成由4个分量来表示:
R,G,B就不介绍了。A:Alpha值即透明度。取值范围0~255,0为完全透明,255为完全不透明。
代码实现图片合成:

void C油表View::OnGdiCombine()
{
	// TODO: 在此添加命令处理程序代码
	CDC *pDC = GetDC();
	Bitmap background(L"我.bmp");
	Graphics graphics(pDC->m_hDC);////绘制背景
	graphics.DrawImage(&background, 0, 0, background.GetWidth(), background.GetHeight());
	Bitmap forground(L"媳妇~.jpg");////载入前景图
	INT iWidth = forground.GetWidth();
	INT iHeight = forground.GetHeight();
	Color color, colorTemp;
	////分别设置前景图中的每一个像素的透明度
	for (INT iRow = 0; iRow < iHeight; iRow++)
	{
		for (INT iColumn = 0; iColumn < iWidth; iColumn++)
		{
			/////的到每个像素的色彩信息
			forground.GetPixel(iColumn, iRow, &color);
			////设置每个像素的透明度为220,原有的RGB分量不变
			colorTemp.SetValue(color.MakeARGB(220, color.GetRed(), color.GetGreen(), color.GetBlue()));
			forground.SetPixel(iColumn, iRow, colorTemp);
		}
	}
	///绘制前景图,相当于在背景图上透明显示
	graphics.DrawImage(&forground, 0, 0, iWidth, iHeight);
}
代码实现: