我的问题是如何通过GraphicsPath裁剪图像。我有一个相当复杂的剪切路径(由不同的圆弧组成),我只需要保存图像在此路径中的那部分。
我有一个这样的类:
class A
{
private GraphicsPath GetGraphicsPath()
{
... some stuff ...
return gp;
}
public void Draw(Graphics g)
{
g.DrawPath(pen, GetGraphicsPath());
}
public Save(Image img, string fileName)
{
Bitmap b = new Bitmap(img.Width, img.Height);
Graphics bg = Graphics.FromImage(b);
bg.Clip = new Region(GetGraphicsPath());
bg.DrawImage(img, 0, 0);
b.Save(fileName + ".png");
}
}然后我有一个带有面板pnMain的表单,带有一个背景图像。我有两个按钮,具有以下功能:
private void button1_Click(object sender, EventArgs e)
{
Graphics g = pnMain.CreateGraphics();
a.Draw(g);
}
private void button2_Click(object sender, EventArgs e)
{
Image img = pnMain.BackgroundImage;
a.Save(img, "test");
}(在这两种情况下,a都是A的实例)。我的问题是,在屏幕上绘制的剪切区域(使用第一个按钮和绘制方法)是我想保存的,但是,通过第二个按钮和保存方法保存的剪切图像被扭曲,变小和移动。我遗漏了什么?
发布于 2012-07-19 07:07:49
我想出来了--它是面板中背景图像的分辨率。位图img的属性HorizontalResolution和VerticalResolution必须与图形的DPIX和DPIY属性匹配。我不知道如何通过C#来设置它们,但我能够在Photoshop中更改位图的分辨率,现在一切都正常了。
https://stackoverflow.com/questions/11551529
复制相似问题