2011-03-28 51 views
8

我試圖挽救一個視覺對象,它有一個透明背景,使用RenderTargetBitmap位圖...如何爲RenderTargetBitmap的輸出設置透明度顏色?

public static RenderTargetBitmap RenderToBitmap(this Visual Source, int Width, int Height) 
    { 
     var Result = new RenderTargetBitmap(Width, Height, 96, 96, PixelFormats.Default); 

     Result.Render(Source); 
     return Result; 
    } 

它的工作原理,但透明的像素與黑色渲染。 將這些透明像素更改爲其他顏色的最簡單方法是什麼?

+0

你把圖像保存爲jpeg嗎?我將這種行爲保存爲JPEG格式並將其保存爲PNG – 2011-03-28 20:43:07

+0

保存爲.JPG文件。我認爲所有格式的輸出應該相同,因此需要將透明度更改爲特定的顏色。 – 2011-03-28 20:52:22

回答

1

如果您將圖像保存爲JPG,透明將顯示爲黑色,因爲JPG不支持透明通道AFAIK。可能的解決方案:保存爲PNG,或使用合理的背景顏色進行繪製。

1

我還沒有測試過這個,但理論上它應該可以工作。

  1. 使用CopyPixels()方法來從RenderTargetBitmap的所有像素數據提取到一個數組。

  2. 然後查詢所有這些像素的Alpha通道以及它們等於0x00(完全透明)的位置,將顏色設置爲背景中您想要的任何顏色。如果你想變得更加優雅,你需要做「顏色數學」來正確設置半透明像素的顏色。

  3. 最後,在您調整了像素數組後,從它們創建一個新的BitmapSource。

  4. 要保存到磁盤,您可能必須在內存中創建一個Image並將其Source設置爲新的Bitmapsource並再次運行RenderToBitmap。

希望它有幫助。

編輯: 張貼在此之後,我不得不 又一想,可能是更容易。

如果拿 視覺元素的克隆或快照您正試圖保存 ,並把它變成一個新的內存板 (如電網或帆布),你 可以簡單地改變背景 面板是你想要的顏色。

然後,您將使用面板作爲您的 RenderTargetBitmap源代碼。

+0

嗨,我正在嘗試你用UWP說的話,但我得到了一個黑色的背景。這是爲什麼? – gayan1991 2016-04-28 01:31:56

相關問題