在某些情况下希望处理一些图片,比如
给图片添加一般文字:
原图
程序处理成
给图片添加水印:
原图
程序处理成
还有圆角效果:
原图
程序处理成
注:
(1)以下程序针对这个应用,也许这些对你没有用,但是基本的原理都差不多
(2)以上图为测试用,应该不算侵犯肖像权吧
程序界面:
程序点击这里下载。 如果需要提高图片质量,把
image.Save(sDstFilePath,ImageFormat.Jpeg);
改成
ImageCodecInfomyImageCodecInfo;
EncodermyEncoder;
EncoderParametermyEncoderParameter;
EncoderParametersmyEncoderParameters;
myImageCodecInfo=ImageCodecInfo.GetImageEncoders()[0];
myEncoder=Encoder.Quality;
myEncoderParameters=newEncoderParameters(1);
myEncoderParameter=newEncoderParameter(myEncoder,100L); // 0-100
myEncoderParameters.Param[0]=myEncoderParameter;
image.Save(sDstFilePath,myImageCodecInfo,myEncoderParameters);
myEncoderParameter.Dispose();
myEncoderParameters.Dispose();
这是提高质量后的效果:
附一些关键代码:
publicclassMyGDI
{
publicstaticvoidCreateWatermark(stringsSrcFilePath,stringsDstFilePath,stringsText1,stringsColor1,stringsSize1,stringsFont1,stringsText2,stringsColor2,stringsSize2,stringsFont2,stringsBgColor,stringsTransparence)
{
System.Drawing.Imageimage=System.Drawing.Image.FromFile(sSrcFilePath);
Graphicsg=Graphics.FromImage(image);
g.SmoothingMode=SmoothingMode.AntiAlias;
g.InterpolationMode=InterpolationMode.HighQualityBicubic;
g.CompositingQuality=CompositingQuality.HighQuality;
g.TextRenderingHint=System.Drawing.Text.TextRenderingHint.AntiAlias;//文字抗锯齿
g.DrawImage(image,0,0,image.Width,image.Height);
Fontf1=newFont(sFont1,float.Parse(sSize1));
Fontf2=newFont(sFont2,float.Parse(sSize2));
Brushbrushfortext1=newSolidBrush(ColorTranslator.FromHtml(sColor1));
Brushbrushfortext2=newSolidBrush(ColorTranslator.FromHtml(sColor2));
Brushbrushforbg=newSolidBrush(Color.FromArgb(Convert.ToInt16(255*float.Parse(sTransparence)),ColorTranslator.FromHtml(sBgColor)));
g.RotateTransform(-20);
Rectanglerect=newRectangle(-image.Width/2-50,image.Height-50,image.Width*2,40);
g.DrawRectangle(newPen(brushforbg),rect);
g.FillRectangle(brushforbg,rect);
Rectanglerectfortext1=newRectangle(-image.Width/2+image.Width/5,image.Height-45,image.Width*2,60);
for(inti=0;i<10;i++)
g.DrawString(sText1,f1,brushfortext1,rectfortext1);
Rectanglerectfortext2=newRectangle(-image.Width/2+image.Width/5,image.Height-25,image.Width*2,60);
for(inti=0;i<10;i++)
g.DrawString(sText2,f2,brushfortext2,rectfortext2);
image.Save(sDstFilePath,ImageFormat.Jpeg);
image.Dispose();
}
publicstaticvoidCreateRoundedCorner(stringsSrcFilePath,stringsDstFilePath,stringsCornerLocation)
{
System.Drawing.Imageimage=System.Drawing.Image.FromFile(sSrcFilePath);
Graphicsg=Graphics.FromImage(image);
g.SmoothingMode=SmoothingMode.HighQuality;
g.InterpolationMode=InterpolationMode.HighQualityBicubic;
g.CompositingQuality=CompositingQuality.HighQuality;
Rectanglerect=newRectangle(0,0,image.Width,image.Height);
GraphicsPathrectPath=CreateRoundRectanglePath(rect,image.Width/10,sCornerLocation);//构建圆角外部路径
Brushb=newSolidBrush(Color.White);//圆角背景白色
g.DrawPath(newPen(b),rectPath);
g.FillPath(b,rectPath);
g.Dispose();
image.Save(sDstFilePath,ImageFormat.Jpeg);
image.Dispose();
}
publicstaticvoidCreatePlainText(stringsSrcFilePath,stringsDstFilePath,stringsText,stringsColor,stringsSize,stringsFont)
{
System.Drawing.Imageimage=System.Drawing.Image.FromFile(sSrcFilePath);
Graphicsg=Graphics.FromImage(image);
g.SmoothingMode=SmoothingMode.AntiAlias;
g.InterpolationMode=InterpolationMode.HighQualityBicubic;
g.CompositingQuality=CompositingQuality.HighQuality;
g.DrawImage(image,0,0,image.Width,image.Height);
g.TextRenderingHint=System.Drawing.Text.TextRenderingHint.AntiAlias;//文字抗锯齿
Fontf=newFont(sFont,float.Parse(sSize));
Brushb=newSolidBrush(ColorTranslator.FromHtml(sColor));
Rectanglerect=newRectangle(10,5,image.Width,image.Height);//适当空开一段距离
for(inti=0;i<30;i++)//加强亮度
g.DrawString(sText,f,b,rect);
image.Save(sDstFilePath,ImageFormat.Jpeg);
image.Dispose();
}
privatestaticGraphicsPathCreateRoundRectanglePath(Rectanglerect,intradius,stringsPosition)
{
GraphicsPathrectPath=newGraphicsPath();
switch(sPosition)
{
case"TopLeft":
{
rectPath.AddArc(rect.Left,rect.Top,radius*2,radius*2,180,90);
rectPath.AddLine(rect.Left,rect.Top,rect.Left,rect.Top+radius);
break;
}
case"TopRight":
{
rectPath.AddArc(rect.Right-radius*2,rect.Top,radius*2,radius*2,270,90);
rectPath.AddLine(rect.Right,rect.Top,rect.Right-radius,rect.Top);
break;
}
case"BottomLeft":
{
rectPath.AddArc(rect.Left,rect.Bottom-radius*2,radius*2,radius*2,90,90);
rectPath.AddLine(rect.Left,rect.Bottom-radius,rect.Left,rect.Bottom);
break;
}
case"BottomRight":
{
rectPath.AddArc(rect.Right-radius*2,rect.Bottom-radius*2,radius*2,radius*2,0,90);
rectPath.AddLine(rect.Right-radius,rect.Bottom,rect.Right,rect.Bottom);
break;
}
}
returnrectPath;
}
}
分享到:
相关推荐
用Visual C++.NET进行GDI+编程 Visual C++.NET GDI+编程基础 VC++ GDI+编程的字体和文本绘制 基于VC.NET的GDI+图像处理
Visual Basic.NET GDI+技术教程
asp.net下GDI+的一些常用应用(水印,文字,圆角处理)技巧
超全面的.NET GDI+图形图像编程教程
VB.Net GDI+ 应用例子,用GDI+设计显示不同风格的文本形式,一个绘图工具的应用例子
c#.net采用GDI+技术开发的可以组态的程序源码。 从老外的网站上弄来的,看着实现的功能挺有意思,就发上来了。
asp.net利用gdi+生成验证码,内有一个类文件 和 一个网页
GDI+技术实现在画面上,图片上添加水印功能。
我们首先介绍一下GDI+的新特性以及其编程方式的改变,然后介绍用Visual C++.net在基于对话框和单文档/多文档等应用程序中使用GDI+的一般方法。 GDI+新特性 GDI+与GDI相比,增加了下列新的特性: 1、渐变...
VC.Net 2010 使用GDI+的配置说明
以前开发人员可以通过GDI(Graphics Device Interface)在Windows窗口中绘制图形、文本和图像。但GDI的图像处理能力却... 本文从实际应用出发,着重讨论了GDI+和CImage类的一般使用方法以及在图像处理等方面的使用方法。
非常好的demo和源码,介绍.NET中GDI+关于Brushes的一些高级操作。例如填充等等。
visual basic.net gdi+技术教程.rar
GDI+是Windows系统内置的图像处理技术,简单实用。 VB.NET为其提供了丰富的函数,可以供调用,适合初学者。 如果只是做2D图形图像的,完全够用了。
GDI+绘制圆角矩形
本书是一本为.NET开发人员讲授如何编写Windows和Web图形应用程序的专著,书中全面介绍了GDI+和Windows图形程序设计的基本知识和GDI+图形程序设计的各个方面。 本书适合于开发GDI+图形应用程序的初、中级程序员...
本课程用VB.NET结合GDI+,从无到有开发一个功能较完整的交互式CAD系统。作者有交互式CAD系统、动态几何系统开发经验。出版过交互式CAD系统开发方面的图书。课程先讲准备知识,然后讲整个系统的开发思路和主要技术,...