小白只会用texturebrush平铺填充
效果就成了p2想要的效果是图片居中填满格子,而且只要一张图,不平铺!!!
求助,50分是小弟的全部家产了orz

解决方案 »

  1.   

    /// <summary>
    /// 填充模式
    /// </summary>
    /// <res></res>
    public enum FillMode
    {
        /// <summary>
        /// 平铺
        /// </summary>
        /// <res></res>
        Title = 0,
        /// <summary>
        /// 居中
        /// </summary>
        /// <res></res>
        Center = 1,
        /// <summary>
        /// 拉伸
        /// </summary>
        /// <res></res>
        Struk = 2,
        /// <summary>
        /// 缩放
        /// </summary>
        /// <res></res>
        Zoom = 3
    }
    /// <summary>
    /// 将指向图像按指定的填充模式绘制到目标图像上
    /// </summary>
    /// <param name="SourceBmp">要控制填充模式的源图</param>
    /// <param name="TargetBmp">要绘制到的目标图</param>
    /// <param name="_FillMode">填充模式</param>
    /// <res></res>
    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);
        }
    }