C#水印不适用于.gif和.tif图像

C#水印不适用于.gif和.tif图像,c#,watermark,C#,Watermark,我正在尝试使用.png图像为图像添加水印 我的.jpg和.png图像正确地添加了水印,但.tif和.gif图像给出了错误信息 我在用c#做这件事。 我犯了一个错误: {“无法从具有 索引像素格式。at系统。绘图。图形。FromImage(图像 图像)在水印处。测试图像\u水印。按钮1\u单击(对象 发送方,事件参数“} 我的代码 FileStream fs = new FileStream(img, FileMode.Open, FileAccess.Read);

我正在尝试使用.png图像为图像添加水印 我的.jpg和.png图像正确地添加了水印,但.tif和.gif图像给出了错误信息

我在用c#做这件事。 我犯了一个错误:

{“无法从具有 索引像素格式。at系统。绘图。图形。FromImage(图像 图像)在水印处。测试图像\u水印。按钮1\u单击(对象 发送方,事件参数“}

我的代码

FileStream fs = new FileStream(img, FileMode.Open, FileAccess.Read);
                    image = Image.FromStream(fs);

                    int newWaterWidth = (int)((float)image.Width * .30);


                    int newWaterHeight = (newWaterWidth * watermarkImage.Height) / watermarkImage.Width;

                    Bitmap resizedWaterm = new Bitmap(newWaterWidth, newWaterHeight);
                    Graphics g = Graphics.FromImage((Image)resizedWaterm);

                    g.DrawImage(watermarkImage, 0, 0, newWaterWidth, newWaterHeight);

                    ***Graphics imageGraphics = Graphics.FromImage(image);*** //error at this line

                    TextureBrush watermarkBrush = new TextureBrush((Image)resizedWaterm);
                    int x = (image.Width / 2 - resizedWaterm.Width / 2);

                    int y = (image.Height / 2 - resizedWaterm.Height / 2);

                    watermarkBrush.TranslateTransform(x, y);

                    imageGraphics.FillRectangle(watermarkBrush, new Rectangle(new Point(x, y), new Size(resizedWaterm.Width + 1, resizedWaterm.Height)));
                    var filename = Path.GetFileName(img);

                    image.Save(outputFolder + "\\" + filename);
对于这些类型的图像,您需要执行哪些不同的操作?

“无法从具有索引像素格式的图像创建图形对象。”这本身就说明了这一点。
GIF图像是基于调色板的,您的TIFF图像似乎也被编入索引(虽然有全彩TIFF)。

可能是重复的,我会试试,但我认为这不管用。。。。谢谢@codecaster你需要展示你已经尝试过的东西。这个问题显示了同样的错误,也给出了解决方法:在图像的副本上绘制(
img=newbitmap(img);newGraphics=Graphics.FromImage(img);
)。如果您在web上搜索错误消息,您会发现这个问题,这是对您的期望。因此,请尝试理解该问题和答案中的内容,如果仍然不起作用,请用您尝试过的内容更新您的问题。很抱歉,该解决方案不起作用。。我使用的是filestream,使用这种解决方案会产生错误,这就是我所说的“试着理解在这个问题和答案中所说的内容”。使用filestream并不重要,因为
Image.FromStream()
返回一个
Image
。然后,您可以创建一个位图并创建一个
图形
对象以在该位图上绘制。正如我链接的问答中所解释的那样。是的,我想这是正在发生的事情。。有什么解决办法吗@Nickolay Olshevskyou可以使用Image.Save方法将其转换为png/jpg,然后添加水印。问题是它没有加载到图形对象中。。。我想保持文件扩展名不变。。