C# 绘制图片平铺,拉伸,居中等(转)

自从用C#,发现自己变的越来越懒,C#各个功能实现都可以在网上找到类似代码。

我就乐的坐享其成,把代码改改就OK了。

代码出自:http://www.dylike-soft.com/blogview.asp?id=109

 

C# 源码

/// <summary>
/// 填充模式
/// </summary>
/// <remarks></remarks>
public enum FillMode
{
   
/// <summary>
   
/// 平铺
   
/// </summary>
   
/// <remarks></remarks>
    Title = 0,
   
/// <summary>
   
/// 居中
   
/// </summary>
   
/// <remarks></remarks>
    Center = 1,
   
/// <summary>
   
/// 拉伸
   
/// </summary>
   
/// <remarks></remarks>
    Struk = 2,
   
/// <summary>
   
/// 缩放
   
/// </summary>
   
/// <remarks></remarks>
    Zoom = 3
}
/// <summary>
/// 将指向图像按指定的填充模式绘制到目标图像上
/// </summary>
/// <param name="SourceBmp">要控制填充模式的源图</param>
/// <param name="TargetBmp">要绘制到的目标图</param>
/// <param name="_FillMode">填充模式</param>
/// <remarks></remarks>
public void Image_FillRect(Bitmap SourceBmp, Bitmap TargetBmp, FillMode _FillMode)
{
   
try {
       
switch (_FillMode) {
           
case FillMode.Title:
               
using (TextureBrush Txbrus = new TextureBrush(SourceBmp)) {
                    Txbrus.WrapMode
= Drawing2D.WrapMode.Tile;
                   
using (Graphics G = Graphics.FromImage(TargetBmp)) {
                        G.FillRectangle(Txbrus,
new Rectangle(0, 0, TargetBmp.Width - 1, TargetBmp.Height - 1));
                    }
                }

               
break;
           
case FillMode.Center:
               
using (Graphics G = Graphics.FromImage(TargetBmp)) {
                   
int xx = (TargetBmp.Width - SourceBmp.Width) / 2;
                   
int yy = (TargetBmp.Height - SourceBmp.Height) / 2;
                    G.DrawImage(SourceBmp,
new Rectangle(xx, yy, SourceBmp.Width, SourceBmp.Height), new Rectangle(0, 0, SourceBmp.Width, SourceBmp.Height), GraphicsUnit.Pixel);
                }

               
break;
           
case FillMode.Struk:
               
using (Graphics G = Graphics.FromImage(TargetBmp)) {
                    G.DrawImage(SourceBmp,
new Rectangle(0, 0, TargetBmp.Width, TargetBmp.Height), new Rectangle(0, 0, SourceBmp.Width, SourceBmp.Height), GraphicsUnit.Pixel);
                }

               
break;
           
case FillMode.Zoom:
               
double tm = 0.0;
               
int W = SourceBmp.Width;
               
int H = SourceBmp.Height;
               
if (W > TargetBmp.Width) {
                    tm
= TargetBmp.Width / SourceBmp.Width;
                    W
= W * tm;
                    H
= H * tm;
                }
               
if (H > TargetBmp.Height) {
                    tm
= TargetBmp.Height / H;
                    W
= W * tm;
                    H
= H * tm;
                }
               
using (Bitmap tmpBP = new Bitmap(W, H)) {
                   
using (Graphics G2 = Graphics.FromImage(tmpBP)) {
                        G2.DrawImage(SourceBmp,
new Rectangle(0, 0, W, H), new Rectangle(0, 0, SourceBmp.Width, SourceBmp.Height), GraphicsUnit.Pixel);
                       
using (Graphics G = Graphics.FromImage(TargetBmp)) {
                           
int xx = (TargetBmp.Width - W) / 2;
                           
int yy = (TargetBmp.Height - H) / 2;
                            G.DrawImage(tmpBP,
new Rectangle(xx, yy, W, H), new Rectangle(0, 0, W, H), GraphicsUnit.Pixel);
                        }
                    }
                }

               
break;
        }
    }
catch (Exception ex) {
        Console.WriteLine(ex.Message);
    }
}

posted @ 2011-04-21 23:20  Lance Yang  阅读(2641)  评论(0编辑  收藏  举报