2012-12-15 31 views
2

我有一個問題,添加剪貼畫(從PNG文件)到BMP對象。我爲jpeg圖像添加了一些剪貼畫,保存之後,我得到了一個神祕的圖像:一些剪貼畫出現在已保存的圖像中,但有些則不是。添加一個剪貼畫從PNG文件

下面是代碼,我怎麼加的剪貼畫圖像:

using (System.Drawing.Graphics gfx = System.Drawing.Graphics.FromImage(this._image)) 
     { 
      gfx.CompositingMode = CompositingMode.SourceOver; 
      gfx.CompositingQuality = CompositingQuality.HighQuality; 
      gfx.InterpolationMode = InterpolationMode.HighQualityBicubic; 


      gfx.DrawImage(image, posX, posY, newWidth, newHeight); 
      gfx.Save(); 
     } 

能anybode解釋什麼是我做錯了,或者爲什麼這種情況出現?

編輯: 當我使用ASP.NET應用程序中的代碼,當我在Windows中使用它的應用程序,一切都很好

+0

您添加了僅當您在ASP.NET應用程序中使用代碼時纔會出現問題的信息。請詳細瞭解如何加載主圖像,剪貼畫圖像以及如何保存最終圖像。 –

回答

0

我不知道這是否是你的問題的原因它發生,但行gfx.Save()不會保存您繪製回圖像的圖像,但會保存Graphics對象的狀態。爲了將更改保存回圖像,請確保調用Image.Save()方法並仔細檢查以確保您沒有在代碼中某處恢復先前的圖像。有關它的更多信息Graphics.Save方法可以在這裏找到:http://msdn.microsoft.com/en-us/library/system.drawing.graphics.save(v=vs.100).aspx

更新

你的,因爲它是一個透明度問題的評論中寫道。如果這是原因,請查看從文件加載剪貼畫圖像的代碼。這也可能是由圖像文件中使用的各種像素格式造成的。更改您加載算法圖像,這樣的事情可能會解決這個問題:

  • 加載您的背景圖片,讓我們說這是這樣完成的:Image backgroundImg = new Bitmap(backgroundImgPath);
  • 創建一個新的空圖像作爲所有圖像的基礎:this._image = new Bimap(backgroundImg.Width, backgroundImg.Height, PixelFormat.Format32bppArgb);
  • gfx.CompositingMode = CompositingMode.SourceCopy;
  • 繪製backgroundImg內容到this._image然後,你就可以繪製剪貼畫爲你做,現在(只是註釋掉gfx.Save();法)

讓我知道這是否有幫助。

+0

據我瞭解,在它保存狀態後,我的所有剪貼畫都必須出現在圖像中,但在我的情況下出現問題 – Nikolai

+0

我想保存'Graphics'對象不是必需的,因爲它在此之後被處理。問題在於代碼的不同部分,即應用新剪貼畫的代碼。 –

+0

我對此進行了更深入的研究,並注意到圖像中出現了剪貼畫,但這裏的透明度非常高(它們太透明)。這讓我更加困惑......他們如何變得透明?仍然需要深入研究 – Nikolai