2016-12-20 236 views
2

不拉丝我想出了一个错误:Solution for "A Graphics Object cannot be Created from an Image that has an Indexed Pixel Format"水印图像

但是: Graphics对象不能从一个具有索引像素格式

所以我实现了这个代码到我的方法的形像造现在我的水印不想绘制在我的图像上。

请任何人都可以协助。

代码:

private Image AddWaterMark(Image original) 
{ 
    Image waterMark = Image.FromFile(ConfigurationManager.AppSettings["GalleryFolder"] + @"\watermark.png"); 
    Bitmap bm = (Bitmap)original; 

    Size waterMarkResize = ResizeFit(new Size(original.Width, original.Height)); 

    using (Image watermarkImage = new Bitmap(waterMark, waterMarkResize)) 
    using (Graphics imageGraphics = Graphics.FromImage(new Bitmap(bm.Width, bm.Height))) 
    { 
     imageGraphics.DrawImage(bm, new Rectangle(0, 0, bm.Width, bm.Height), 0, 0, bm.Width, bm.Height, GraphicsUnit.Pixel); 
     using (TextureBrush watermarkBrush = new TextureBrush(watermarkImage)) 
     { 
      int x = (original.Width/2 - watermarkImage.Width/2); 
      int y = (original.Height/2 - watermarkImage.Height/2); 
      watermarkBrush.TranslateTransform(x, y); 
      imageGraphics.FillRectangle(watermarkBrush, new Rectangle(new Point(x, y), new Size(watermarkImage.Width + 1, watermarkImage.Height))); 
     } 
    } 

    return bm; 
} 
+0

你有什么错误吗?如果将水印刷变为纯白色(或黑色)笔刷会怎样?你看到了什么吗? –

+0

没有错误。它保存图像但没有水印。试图用黑色和白色的画笔仍然没有创建任何图像。 –

回答

3

你正在创建一个新的Bitmap传递给Graphics.FromImage后恢复原uneditted Bitmap。独立创建新的Bitmap,将其传递给FromImage,然后返回新的Bitmap

var edit = new Bitmap(bm.Width, bm.Height); 
// ... 
using (Graphics imagesGraphics = Graphics.FromImage(edit)) 
{ 
    // draw original 
    // draw watermark 
} 
return edit;