2016-08-28 14 views
0

私はStorageFileからBitmapImageを持っている:BitmapImageがグレースケールであるかどうかを確認する方法は?

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

私は画像がそのPixelWidthPixelHeight特性を計算することにより、正方形であるかどうかを確認することができました。画像の色がグレースケールであるかどうかを確認するにはどうすればよいですか? This postBitmapPixelFormatというプロパティがありますが、残念ながらBitmapはUWPでは使用できなくなりました。

+0

一般に、グレースケール画像で独特のものは、淡い色を使用することだけです。ピクセルの赤、緑、青の値はおおよそ同じです。グレースケールに特有の画像フォーマットがいくつかありますが、今日はほとんど使用されていません。表示するハードウェアはほとんど完全に消えています。それはあなたがなぜそれを気にかけているのかという疑問をひきます。 –

答えて

1

グレースケールの定義によって異なります。

グレースケールはピクセル形式の問題だと思うかもしれません。この場合、UWPにPixelFormatの代替案がなければなりません(本当にわかりません)。

でも、あなたは多分考えるかもしれません。

32ビットARGBピクセル形式のイメージをグレースケールで表示できますか?あなたは、各ピクセルをスキャンし、彼らはこのように、グレースケールライン上のすべてですと仮定します

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

ピクセルフォーマット1600万個の組み合わせが可能になりますが、唯一の256個のグレーのものは、実際に使用されています。

情報を失うことなく1つに変換できるので、これはまだグレースケールの画像と言えるかもしれません。

私に正しくお答えいただければ、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 
} 
関連する問題