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楼正解
[解决办法]
[解决办法]
- 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");}
[解决办法]