C#实现绘制浮雕图片效果实例
本文采用C#实例讲解了处理图片为浮雕效果的实现方法,这在PS中是一个常见的功能,也是C#中的一个简单的图像处理例子。程序先读取原图,然后依次访问每个像素的RGB值,获取相邻两个像素的R、G、B值,计算与左上角像素的RGB分量之差,将计算后的RGB值回写到位图,最后进行图片的浮雕处理。
主要代码如下:
usingSystem;
usingSystem.Drawing;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Windows.Forms;
usingSystem.Data;
usingSystem.Drawing.Imaging;
namespaceEmbossColander
{
publicclassForm1:System.Windows.Forms.Form
{
privateSystem.ComponentModel.Containercomponents=null;
publicForm1()
{
InitializeComponent();
}
protectedoverridevoidDispose(booldisposing)
{
if(disposing)
{
if(components!=null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#regionWindows窗体设计器生成的代码
privatevoidInitializeComponent()
{
this.components=newSystem.ComponentModel.Container();
this.Size=newSystem.Drawing.Size(350,200);
this.Text="Form1";
}
#endregion
protectedoverridevoidOnPaint(PaintEventArgse)
{
base.OnPaint(e);
Graphicsgraphics=e.Graphics;
graphics.Clear(Color.White);
graphics.ScaleTransform(0.7f,0.7f);
Bitmapimage=newBitmap("dog.bmp");
intWidth=image.Width;
intHeight=image.Height;
//image2:进行雕刻处理
Bitmapimage2=image.Clone(newRectangle(0,0,Width,Height),PixelFormat.DontCare);
//绘制原图
graphics.DrawImage(
image,newRectangle(0,0,Width,Height));
Colorcolor,colorTemp,colorLeft;
//进行图片的浮雕处理
//依次访问每个像素的RGB值
for(inti=Width-1;i>0;i--)
{
for(intj=Height-1;j>0;j--)
{
//获取相邻两个像素的R、G、B值
color=image.GetPixel(i,j);
colorLeft=image.GetPixel(i-1,j-1);
//计算与左上角像素的RGB分量之差
//67:控制图片的最低灰度,128:常量,更改这两个值会得到不同的效果
intr=Math.Max(67,Math.Min(255,
Math.Abs(color.R-colorLeft.R+128)));
intg=Math.Max(67,Math.Min(255,
Math.Abs(color.G-colorLeft.G+128)));
intb=Math.Max(67,Math.Min(255,
Math.Abs(color.B-colorLeft.B+128)));
ColorcolorResult=Color.FromArgb(255,r,g,b);
//将计算后的RGB值回写到位图
image.SetPixel(i,j,colorResult);
}
//绘制浮雕图
graphics.DrawImage(
image,newRectangle(Width+10,0,Width,Height));
}
}
[STAThread]
staticvoidMain()
{
Application.Run(newForm1());
}
}
}
感兴趣的朋友可以点此本站下载完整实例代码。