私の問題は、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パネルのフォームがあります。次の機能を持つ2つのボタンがあります。
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のインスタンスです)。私の問題は、(最初のボタンとメソッドDrawを使用して)画面に描画されたクリッピング領域が保存したいのですが、2番目のボタンとメソッドSaveを使用して保存されたクリップ画像が歪んで小さくシフトしていることです。私は何が欠けていますか?