2012-04-02 192 views
0

添加8 bpp PNG到您的資源文件。 如果您嘗試使用它,比如:如何防止VS設置爲32ARGB從8 bpp原始圖像的位圖

Bitmap bmp = properties.Resources.My8bppImage; 

的BMP的PixelFormat將是32 ARGB!但它是錯誤的,應該是8 bpp索引。 如何獲取正確的位圖?

+0

你能顯示一些代碼嗎? – 2012-04-02 18:46:08

回答

2

這裏沒有很多選項,Visual Studio資源編輯器和Bitmap類都使用PNG解碼器,它將圖像轉換爲32bpp。這意味着很有幫助,32bpp呈現的很好,很快。

回退選項是使用System.Windows.Media.Imaging.PngBitmapDecoder類。您可以將它傳遞給BitmapCreateOptions.PreservePixelFormat選項並強制它保留8bpp格式。您可以將png作爲資源添加,首先將其重命名爲.bin文件,這樣它就不會嘗試將其解釋爲圖像文件,但會將其設置爲字節[]。然後像這樣的代碼將工作:

using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.IO; 
... 
     Stream stream = new MemoryStream(Properties.Resources.marble8); 
     PngBitmapDecoder decoder = new PngBitmapDecoder(stream, 
      BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default); 
     BitmapSource bitmapSource = decoder.Frames[0]; 

其中「marble8」是我用的測試圖像,替代你自己的。您需要添加對WindowsBase和PresentationCore程序集的引用。

+0

這很傷心......恩,非常感謝。 :) – Pedro77 2012-04-02 21:10:23

+0

其實這是錯誤的; Bitmap類只會將png圖像更改爲32位(如果它們包含透明度)。我對這種奇怪的行爲做了一些研究,並找到了解決方法(https://stackoverflow.com/a/43137699/395685)。 – Nyerguds 2017-11-03 18:01:33

相關問題