大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C#技巧 > C#缩放和裁剪图片

C#缩放和裁剪图片

关键词:裁剪缩放图片C#  阅读(766) 赞(10)

[摘要]本文是对C#缩放和裁剪图片的讲解,对学习C#编程技术有所帮助,与大家分享。

在GDI+中,缩放和剪裁可以看作同一个操作,无非就是原始区域的选择不同罢了。空口无凭,先看具体算法可能更好理解。

C#代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Drawing;
usingSystem.Drawing.Drawing2D;
usingSystem.Drawing.Imaging;

namespaceProject
{
classImageOperation
{
///<summary>
 ///Resize图片
///</summary>
///<paramname="bmp">原始Bitmap</param>
///<paramname="newW">新的宽度</param>
///<paramname="newH">新的高度</param>
///<paramname="Mode">保留着,暂时未用</param>
///<returns>处理以后的图片</returns>

publicstaticBitmapResizeImage(Bitmapbmp,intnewW,intnewH,intMode)
{
try
{
Bitmapb=newBitmap(newW,newH);
Graphicsg=Graphics.FromImage(b);
//插值算法的质量
g.InterpolationMode=InterpolationMode.HighQualityBicubic;
g.DrawImage(bmp,newRectangle(0,0,newW,newH),newRectangle(0,0,bmp.Width,bmp.Height),GraphicsUnit.Pixel);
g.Dispose();
returnb;
}
catch
{
returnnull;
}
}
///<summary>
///剪裁--用GDI+
///</summary>
///<paramname="b">原始Bitmap</param>
///<paramname="StartX">开始坐标X</param>
///<paramname="StartY">开始坐标Y</param>
///<paramname="iWidth">宽度</param>
///<paramname="iHeight">高度</param>
///<returns>剪裁后的Bitmap</returns>
publicstaticBitmapCut(Bitmapb,intStartX,intStartY,intiWidth,intiHeight)
{
if(b==null)
{
returnnull;
}
intw=b.Width;
inth=b.Height;
if(StartX>=w||StartY>=h)
{
returnnull;
}
if(StartX+iWidth>w)
{
iWidth=w-StartX;
}
if(StartY+iHeight>h)
{
iHeight=h-StartY;
}
try
{
BitmapbmpOut=newBitmap(iWidth,iHeight,PixelFormat.Format24bppRgb);
Graphicsg=Graphics.FromImage(bmpOut);
g.DrawImage(b,newRectangle(0,0,iWidth,iHeight),newRectangle(StartX,StartY,iWidth,iHeight),GraphicsUnit.Pixel);
g.Dispose();
returnbmpOut;
}
catch
{
returnnull;
}
}
}
}
目标其实都是new Rectangle(0, 0, iWidth, iHeight),缩放算法把整个原始图都往目标区域里塞new Rectangle(0, 0, bmp.Width, bmp.Height),而剪裁只是把原始区域上等宽等高的那个区域new Rectangle(StartX, StartY, iWidth, iHeight)1:1的塞到目标区域里。



相关评论