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);
}
}