Bitmap bitmap = new Bitmap(Server.MapPath(@"AreaImage\1.jpg"));
        //设置范围 
        Rectangle r = new Rectangle(20, 20, 300, 300);
        //创建剪切后的Bitmap对象 
        Bitmap bitmap1 = new Bitmap(300, 300);
        Graphics g1 = Graphics.FromImage(bitmap1);
        g1.DrawImage(bitmap, r);
       // g1.DrawImageUnscaled(bitmap, r);
        bitmap1.Save(Server.MapPath(@"AreaImage\new.jpg"));我有一张图片1.jpg 从坐标x=20 y=20开始剪切300宽度高度的新图片
为什么保存后的new.jpg一打开会有top 20 left 20 的空白间隔
我知道是上面指定的坐标的位置 那我怎么给出掉这个空白位置从0,0开始显示这个图片?

解决方案 »

  1.   

    不是明白 请问ls怎么解决的?
    这里面用到坐标的就是 Rectangle r = new Rectangle(20, 20, 300, 300);
    从x=20 y=20开始切图  是我给的有问题吗?应该怎么给?
      

  2.   

    g1.DrawImage(bitmap, new Rectangle(0, 0, 300, 300), r, GraphicsUnit.World);
      

  3.   

    我跟踪了 就是在  g1.DrawImage(bitmap, new Rectangle(0, 0, 300, 300), r, GraphicsUnit.World);这句报参数无效
    换了还报参数无效? 这是什么问题额?
      

  4.   

    P哥被点名了
    目标区域
    Rectangle r = new Rectangle(0, 0, 300, 300);
      

  5.   

    不是啊 大哥  如果给0 0 那么切原图时是从x=0 y=0开始切的 
    我是想从x=20 y=20开始切
      

  6.   

    Bitmap bitmap1 = new Bitmap(300-20, 300-20);
    既然产从20,20的地方开始切,那么新的图的高和宽就不是300了
      

  7.   

    g1.DrawImage有很多重载,试试改成这个
    g.DrawImage(原Image对象, 新图中的目标区域, 原图中需绘制的区域, GraphicsUnit.Pixel);
      

  8.   

    上面说的区域都是指的Rectangle或者RectangleF(小数)
      

  9.   

    你现在的需求是剪裁        /// <summary>
            /// 剪裁 -- 用GDI+
            /// </summary>
            /// <param name="b">原始Bitmap</param>
            /// <param name="StartX">开始坐标X</param>
            /// <param name="StartY">开始坐标Y</param>
            /// <param name="iWidth">宽度</param>
            /// <param name="iHeight">高度</param>
            /// <returns>剪裁后的Bitmap</returns>
            public static Bitmap KiCut(Bitmap b, int StartX, int StartY, int iWidth, int iHeight)
            {
                if (b == null)
                {
                    return null;
                }            int w = b.Width;
                int h = b.Height;            if (StartX >= w || StartY >= h)
                {
                    return null;
                }            if (StartX + iWidth > w)
                {
                    iWidth = w - StartX;
                }            if (StartY + iHeight > h)
                {
                    iHeight = h - StartY;
                }            try
                {
                    Bitmap bmpOut = new Bitmap(iWidth, iHeight, PixelFormat.Format24bppRgb);                Graphics g = Graphics.FromImage(bmpOut);
                    g.DrawImage(b, new Rectangle(0, 0, iWidth, iHeight), new Rectangle(StartX, StartY, iWidth, iHeight), GraphicsUnit.Pixel);
                    g.Dispose();                return bmpOut;
                }
                catch
                {
                    return null;
                }
            }对应着给参数就应该可以了。
      

  10.   

    谢谢各位了  叶子和夕阳兄弟说的正解,  上面报参数无效是因为GraphicsUnit.World 
    真的要跟叶子说声谢谢