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 @ 2010-09-17 13:56  太古月石  阅读(7822)  评论(0编辑  收藏  举报