2016-12-20 145 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;