为什么在C#中生成位图图像对象时会出现此异常?

为什么在C#中生成位图图像对象时会出现此异常?,c#,.net,image,image-processing,itextsharp,C#,.net,Image,Image Processing,Itextsharp,这段代码只生成一个图形位图图像(表示PDF中的图表,但这并不重要),我对此有一些问题 我有以下情况:在名为pdfvvulnerability的类中,我执行此语句 if (currentVuln.UrgencyRating > 0) { img = Image.GetInstance(ChartHelper.GetPdfChart((int)currentVuln.UrgencyRating * 10), System.Drawing.Imaging.ImageFormat.Bmp)

这段代码只生成一个图形位图图像(表示PDF中的图表,但这并不重要),我对此有一些问题

我有以下情况:在名为pdfvvulnerability的类中,我执行此语句

if (currentVuln.UrgencyRating > 0)
{
    img = Image.GetInstance(ChartHelper.GetPdfChart((int)currentVuln.UrgencyRating * 10), System.Drawing.Imaging.ImageFormat.Bmp);
    vulnerabilityDetailsTable.AddCell(new PdfPCell(img) { Border = PdfPCell.RIGHT_BORDER, BorderColor = new BaseColor(79, 129, 189), BorderWidth = 1, Padding = 5, MinimumHeight = 30, PaddingTop = 10 });
}
currentVuln.UrgencyRating属性的值为7.5,因此调试器进入if主体并尝试执行以下操作:

img = Image.GetInstance(ChartHelper.GetPdfChart((int)currentVuln.UrgencyRating * 10), System.Drawing.Imaging.ImageFormat.Bmp);
因此,使用调试器,我进入ChartHelper.GetPdfChart((int)currentVuln.UrgencyRating*10)执行

现在,输入参数的值是70(因为它已转换为整数,并将其乘以10)

这是返回System.Drawing.Image对象的GetPdfChart()方法的主体:

public static System.Drawing.Image GetPdfChart(int percentage)
    {
        if (percentage == 0)
        {
            return null;
        }

        int WIDTH = 130;
        int HEIGHT = 10;

        using (Bitmap bitmap = new Bitmap(WIDTH, HEIGHT))
        {
            using (Graphics graphics = Graphics.FromImage(bitmap))
            {
                using (LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, WIDTH, HEIGHT), Color.LightGreen, Color.Red, LinearGradientMode.Horizontal))
                {
                    graphics.FillRectangle(brush, new Rectangle(0, 0, WIDTH, HEIGHT));

                    using (Bitmap target = new Bitmap(WIDTH * percentage / 100, HEIGHT))
                    {
                        Rectangle cropped = new Rectangle(0, 0, WIDTH, HEIGHT);

                        using (Graphics g = Graphics.FromImage(target))
                        {
                            g.DrawImage(bitmap, new Rectangle(0, 0, cropped.Width, cropped.Height), cropped, GraphicsUnit.Pixel);
                            //g.Save();
                            //String filename = Path.GetTempFileName() + ".png";
                            //target.Save(filename);
                            //return filename;

                            return bitmap;
                        }
                    }
                }
            }
        }
    }
此方法工作正常,并将System.Drawing.Bitmap对象返回给调用者,调用者是:

img = Image.GetInstance(ChartHelper.GetPdfChart((int)currentVuln.UrgencyRating * 10), System.Drawing.Imaging.ImageFormat.Bmp);

现在我的问题是,当返回并尝试执行上一个操作时,它会给我一个异常,即:参数无效。下面的代码

using (Bitmap bitmap = new Bitmap(WIDTH, HEIGHT)) {
   // ... some code 
   return bitmap;
}
等于

try {
 Bitmap bitmap = new Bitmap(WIDTH, HEIGHT);
 return bitmap;
} finally {
   if (bitmap != null)
        bitmap.Dispose();    
}
图像在返回之前被处理。一种可能的解决方案是制作所创建位图的深度副本,以便处置旧位图:

using (Bitmap bitmap = new Bitmap(WIDTH, HEIGHT)) {
       // ... some code 
       return (Image)bitmap.Clone();
    }

嗯,我不太清楚,你能更好地解释我该怎么解决吗?我刚刚发布了一个解决方案。