c#窗体程序图片填充求助!!!

Lannmo_Yin 2019-05-30 07:45:47
小白只会用texturebrush平铺填充 效果就成了p2 想要的效果是图片居中填满格子,而且只要一张图,不平铺!!! 求助,50分是小弟的全部家产了orz
...全文
77 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
华芸智森 2019-05-30
  • 打赏
  • 举报
回复
/// <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);
    }
}

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧