当前位置:C++技术网 > 资讯 > GDI+实现底片滤镜

GDI+实现底片滤镜

更新时间:2015-12-18 23:04:01浏览次数:1+次

底片滤镜是一种最常见的,也是最简单的滤镜制作。底片滤镜处理实际上是对色彩进行反转的过程,对于黑白图片,他的处理原理就是黑色变为白色,白色变黑色的过程。从处理的算法来看,底片滤镜就是用255减去原有RGB分量值。使用GDI+实现底片滤镜的程序设计很简单。上代码:

void C油表View::OnGdiInverse()
{
	// TODO: 在此添加命令处理程序代码
	this->RedrawWindow();
	CDC* pDC = GetDC();
	Graphics graphics(pDC->m_hDC);
	Bitmap image(L"cos.bmp");
	INT Width = image.GetWidth();
	INT Height = image.GetHeight();
	Color colorTemp, color2;
	Color color;
	/////绘制原图
	graphics.DrawImage(&image, Rect(0, 0, Width, Height));
	for (int i = 0; i < Width; i++)
	{
		for (int j = 0; j < Height; j++)
		{
			image.GetPixel(i, j, &color);
			/////将色彩进行反转,获得底片效果
			int r = 255 - color.GetRed();
			int g = 255 - color.GetGreen();
			int b = 255 - color.GetBlue();
			colorTemp.SetValue(color2.MakeARGB(255, r, g, b));
			//////将计算后的RGB协会到位图
			image.SetPixel(i, j, colorTemp);
		}
		/////动态绘制底片滤镜效果图
		graphics.DrawImage(&image, Rect(Width, 0, Width, Height));
	}
	//////将已经实现了底片效果的位图再反色(恢复到原图)
	for (int i = 0; i < Width; i++)
	{
		for (int j = 0; j < Height; j++)
		{
			image.GetPixel(i, j, &color);
			//////将色彩进行反转,获得底片效果
			int r = 255 - color.GetRed();
			int g = 255 - color.GetGreen();
			int b = 255 - color.GetBlue();
			colorTemp.SetValue(color2.MakeARGB(255, r, g, b));
			///////将计算后的RGB值协会到位图
			image.SetPixel(i, j, colorTemp);
		}
		////绘制经过两次饭色的位图
		graphics.DrawImage(&image, Rect(Width*2, 0, Width, Height));
	}
}
注意,这是GDI+工程,引入必要的代码,在前面的文章我介绍了,请你去看看。

代码实现: