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