首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

DrawImage的用法。该如何解决

2012-10-21 
DrawImage的用法。。。clean_bmp是一个大图像,我想要截取里面的一个小矩形,之后保存为图像。Bitmap bmp new

DrawImage的用法。。。
clean_bmp是一个大图像,我想要截取里面的一个小矩形,之后保存为图像。

Bitmap bmp = new Bitmap(r - l, b - t);
Rectangle bmp_rect = new Rectangle(0, 0, r - l, b - t);
Graphics g = Graphics.FromImage(clean_bmp);
g.DrawImage(bmp, bmp_rect, l, t, r - l, b - t, GraphicsUnit.Pixel);
bmp.Save(offline_save_path + "\\" + textBox1.Text + ".tif");

但是保存后的文件大小是对的,不过确实一片黑,请问我哪里写错了?
谢谢~!

[解决办法]
g.DrawImage(bmp, bmp_rect, l, t, r - l, b - t, GraphicsUnit.Pixel);
这个bmp不是你新建的空白画布吗?当然是空的默认一片黑了.实际上这个参数是源图,而不是目标图.
g.DrawImage(源图,目标图的哪个矩形,从源图中哪个矩形,模式)
此处源图为你要绘制的图,目标图为你新建的空白画布.
[解决办法]
关注中……………………
[解决办法]
1楼正解
[解决办法]

探讨

g.DrawImage(bmp, bmp_rect, l, t, r - l, b - t, GraphicsUnit.Pixel);
这个bmp不是你新建的空白画布吗?当然是空的默认一片黑了.实际上这个参数是源图,而不是目标图.
g.DrawImage(源图,目标图的哪个矩形,从源图中哪个矩形,模式)
此处源图为你要绘制的图,目标图为你新建的空白画布.

[解决办法]
C# code
/// <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 CutOut(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, System.Drawing.Imaging.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;    }}private void button1_Click(object sender, EventArgs e){    Image clean_bmp = this.pictureBox1.Image;    int r = 200;    int l = 100;    int b = 200;    int t = 100;    Bitmap bmp = CutOut(new Bitmap(clean_bmp), l, t, r, t);    bmp.Save(@"D:\a.tif");}
[解决办法]
探讨
g.DrawImage(bmp, bmp_rect, l, t, r - l, b - t, GraphicsUnit.Pixel);
这个bmp不是你新建的空白画布吗?当然是空的默认一片黑了.实际上这个参数是源图,而不是目标图.
g.DrawImage(源图,目标图的哪个矩形,从源图中哪个矩形,模式)
此处源图为你要绘制的图,目标图为你新建的空白画布.

热点排行