2016-08-28 38 views
0

我有一個BitmapImageStorageFile如何檢查BitmapImage是灰度?

using (var stream = await file.OpenAsync(FileAccessMode.Read)) { 
    var bitmap = new BitmapImage(); 
    await bitmap.SetSourceAsync(stream); 
} 

我已經能夠檢查,如果圖像是通過計算其PixelWidthPixelHeight性廣場。如何檢查圖像顏色是否灰度? This postBitmap有一個PixelFormat財產,不幸的是,Bitmap已不再在UWP中可用。

+0

一般來說,對於灰度圖像唯一唯一的是它使用相當平淡的顏色。像素的紅色,綠色和藍色值大致相同。有一些特定於灰度的圖像格式,但現在很少使用,顯示它們的硬件幾乎完全消失。這引發了你爲什麼關心它的問題。 –

回答

1

這取決於您的灰度定義。

您可能認爲灰度是像素格式的問題。在這種情況下,你必須在UWP中找到PixelFormat的替代品,如果它存在的話(我真的不知道)。

但是,你也可能有不同的想法。

32位ARGB像素格式的圖像可以是灰度圖嗎?假設你掃描每個像素和他們都在灰階線,像這樣:

0x000000 
0x010101 
0x020202 
... 
0xfefefe 
0xffffff 

像素格式允許1600萬個組合,但只有256分灰度的人被實際使用。

按照您自己的約定,您可能會說這仍然是灰度圖像,因爲它可以轉換爲一個而不會丟失信息。

如果您正確地閱讀了我,您會看到一個問題的答案,它不需要PixelFormat屬性存在,但計算起來相當昂貴。

2

您可以使用BitmapDecoder來獲取BitmapPixelFormat的值。像這樣使用它

using (var stream = await file.OpenAsync(FileAccessMode.Read)) { 
    var bitmap = new BitmapImage(); 
    await bitmap.SetSourceAsync(stream); 

    var decoder = await BitmapDecoder.CreateAsync(stream); 
    BitmapPixelFormat format = decoder.BitmapPixelFormat; 

    if(format == BitmapPixelFormat.Gray16 || format == BitmapPixelFormat.Gray8) 
     // Bitmap is grayscale 
}