C#图像上的修订图

C#图像上的修订图,c#,C#,我需要在图像上画一个黑色矩形。我必须加载一个tif,然后在上面显示一个黑框。我得到了一些代码的帮助,但我不断地得到错误:无法从具有索引像素格式的图像创建图形对象 因此,我必须以位格式读取它,但当我显示框时,它会调整框的大小。并以全黑色完全显示图片框,而不显示原始图像。如果有人能帮我解决问题,那就太棒了 Bitmap original = (Bitmap)System.Drawing.Image.FromFile(coveted, true);

我需要在图像上画一个黑色矩形。我必须加载一个tif,然后在上面显示一个黑框。我得到了一些代码的帮助,但我不断地得到错误:无法从具有索引像素格式的图像创建图形对象

因此,我必须以位格式读取它,但当我显示框时,它会调整框的大小。并以全黑色完全显示图片框,而不显示原始图像。如果有人能帮我解决问题,那就太棒了

Bitmap original = (Bitmap)System.Drawing.Image.FromFile(coveted, true);
                                Bitmap newImage = new Bitmap(original.Width, original.Height);
                                pictureBox1.Image = newImage;
                                using (Graphics g = Graphics.FromImage(pictureBox1.Image))
                                {
                                    using (SolidBrush brush = new SolidBrush(Color.Black))
                                    {
                                        g.FillRectangle(brush, new Rectangle(x1value, y1value, x3value, y3value));
                                    }
                                }
我不知道怎样才能说得更清楚。发生的是我有一个不支持格式的tif。所以我必须把它改成位图,这样我才能在上面画一个矩形。然后我需要在一个picturebox中显示这个经过编辑的图像(带有编辑的原始图像)。上面的代码是这样的,一旦完成,它显示的只是一个没有原始图像的黑盒子

我相信我运行了一些关于从流中使用位图然后关闭流的操作。有人熟悉这个吗

感谢STO成员的所有帮助!!如果遇到错误“无法从具有索引像素格式的图像创建图形对象”,请使用下面的正确代码编辑图像。 如果您得到了修订的起点(显然,您必须使正则表达式适合您的情况):


您没有在新图像上绘制原始图像

为此:

g.DrawImageUnscaled(original, 0, 0);
另外,我会这样做,我认为在RAM中绘制,然后显示到屏幕上效果更好。也许我错了

using (Graphics g = Graphics.FromImage(newImage))
    {
         g.DrawImageUnscaled(original, 0, 0);

         using (SolidBrush brush = new SolidBrush(Color.Black))
         {
                g.FillRectangle(brush, new Rectangle(x1value, y1value, x3value, y3value));
          }
    }
pictureBox1.Image = newImage;
我还没有测试上面的代码。。祝你好运。

而不是

Bitmap newImage = new Bitmap(original.Width, original.Height);
你想要

Bitmap newImage = new Bitmap(original);
这将使您的新图像从原始图像的内容开始。 不同之处在于,最终的结果是newImage.PixelFormat==PixelFormat.Format32bppArgb,而我假设original.PixelFormat==PixelFormat.format1bpappindexed。
使用PixelFormat.Format32bppArgb,可以创建图形对象;不能使用PixelFormat.Format1AppIndexed。这应该适用于您:

original = (Bitmap)System.Drawing.Image.FromFile(coveted, true); 
using (Graphics g = Graphics.FromImage(original)) 
{ 
  using (SolidBrush brush = new SolidBrush(Color.Black)) 
  { 
    g.FillRectangle(brush, new Rectangle(x1value, y1value, x3value, y3value)); 
  } 
} 
pictureBox1.Image = original;

“我怎样才能让它更清晰”->首先将源代码缩进一点。效果非常好!我为遇到这个问题的人做了编辑。
original = (Bitmap)System.Drawing.Image.FromFile(coveted, true); 
using (Graphics g = Graphics.FromImage(original)) 
{ 
  using (SolidBrush brush = new SolidBrush(Color.Black)) 
  { 
    g.FillRectangle(brush, new Rectangle(x1value, y1value, x3value, y3value)); 
  } 
} 
pictureBox1.Image = original;