C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: グレースケールの画像が白黒(2値)かどうかを判定したい


(過去ログ 82 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■48364 / inTopicNo.1)  グレースケールの画像が白黒(2値)かどうかを判定したい
  
□投稿者/ ムウくん (1回)-(2010/04/03(Sat) 19:17:03)

分類:[.NET 全般] 

白黒またはグレースケールの画像ファイルを扱っています。
質問ですが、ある画像(BitmapまたはImage)が白黒かグレースケールかを判定する簡単(処理時間のかからない)な方法はありますでしょうか?
扱っている画像は白黒かグレースケールしかないという前提でご回答頂いても結構です。
よろしくお願い致します。
引用返信 編集キー/
■48367 / inTopicNo.2)  Re[1]: グレースケールの画像が白黒(2値)かどうかを判定したい
□投稿者/ Hongliang (586回)-(2010/04/03(Sat) 19:44:19)
「白黒」とは、各ピクセル辺り 1bit しか使っていないものを指すのか、それとも各ピクセルは 4bit とか 8bit とか 24bit とかだが全てのピクセルが #000 と #FFF しか使っていないものを指すのか、どちらでしょう?
前者なら、PixelFormat プロパティで確認できます。
後者なら、全てのピクセルを走査するしかないでしょう。
引用返信 編集キー/
■48370 / inTopicNo.3)  Re[2]: グレースケールの画像が白黒(2値)かどうかを判定したい
□投稿者/ Jitta on the way (596回)-(2010/04/03(Sat) 23:20:18)
No48367 (Hongliang さん) に返信
> 「白黒」とは、各ピクセル辺り 1bit しか使っていないものを指すのか、それとも各ピクセルは 4bit とか 8bit とか 24bit とかだが全てのピクセルが #000 と #FFF しか使っていないものを指すのか、どちらでしょう?
> 前者なら、PixelFormat プロパティで確認できます。
> 後者なら、全てのピクセルを走査するしかないでしょう。

でも、元のファイルが JPEG だと、ノイズが乗ったりなんだりで、グレー スケールになってしまいます。
…と思うのですが、違うっけ?
引用返信 編集キー/
■48371 / inTopicNo.4)  Re[3]: グレースケールの画像が白黒(2値)かどうかを判定したい
□投稿者/ Hongliang (588回)-(2010/04/04(Sun) 01:09:45)
> でも、元のファイルが JPEG だと、ノイズが乗ったりなんだりで、グレー スケールになってしまいます。
> …と思うのですが、違うっけ?
jpeg ならそもそもピクセル形式は 24bpp か 8bpp-GrayScale しか選択肢がないはずです。
非可逆圧縮系のノイズについては、エンコード時の問題であって、既に Image オブジェクトにデコード済みの段階ではどうでもいい話になっているかと。
引用返信 編集キー/
■48374 / inTopicNo.5)  Re[4]: グレースケールの画像が白黒(2値)かどうかを判定したい
□投稿者/ 安楽亭 (3回)-(2010/04/04(Sun) 09:17:07)
2010/04/04(Sun) 09:21:05 編集(投稿者)

スミマセン。違うスレッドに投稿してしまいました。
引用返信 編集キー/
■48376 / inTopicNo.6)  Re[5]: グレースケールの画像が白黒(2値)かどうかを判定したい
□投稿者/ ムウくん (2回)-(2010/04/04(Sun) 11:04:05)
皆様、書き込みありがとうございました。
今まで出てきた内容について質問させてください。
PixelFormatがFormat1bppIndexed(1ビット)のビットマップ(bitmap1とします)を作成し、描画します。
これを以下のように保存します。
bitmap1.Save(ファイル名, Imaging.ImageFormat.Gif)
このファイルを再度ビットマップ(bitmap2とします)に読み込みます。
bitmap2 = New Bitmap(上で保存したファイル名)
この時、ファイル保存前のbitmap1のPixelFormatはFormat1bppIndexedなのですが、
保存ファイルを読み込んだ時のbitmap2のPixelFormatはFormat8bppIndexedに変わっています。
これは、ファイル保存時にFormat8bppIndexedになってしまったのでしょうか?
それとも、保存ファイルを読み込むときにFormat8bppIndexedになってしまったのでしょうか?
PixelFormatがFormat1bppIndexedのビットマップをファイルに保存した場合、
再度ビットマップに読み込むときにビットマップのPixelFormatがFormat1bppIndexedとなるにはどうすればよいのでしょうか?
根本的なことを理解していないのかもしれませんので、アドバイスの程よろしくお願い致します。
引用返信 編集キー/
■48377 / inTopicNo.7)  Re[6]: グレースケールの画像が白黒(2値)かどうかを判定したい
□投稿者/ Hongliang (589回)-(2010/04/04(Sun) 11:38:21)
2010/04/04(Sun) 11:54:23 編集(投稿者)

> 保存ファイルを読み込んだ時のbitmap2のPixelFormatはFormat8bppIndexedに変わっています。
> これは、ファイル保存時にFormat8bppIndexedになってしまったのでしょうか?
> それとも、保存ファイルを読み込むときにFormat8bppIndexedになってしまったのでしょうか?
保存時に 8bpp としてエンコードされています。これは GDI+ の gif エンコーダの仕様です。

> PixelFormatがFormat1bppIndexedのビットマップをファイルに保存した場合、
> 再度ビットマップに読み込むときにビットマップのPixelFormatがFormat1bppIndexedとなるにはどうすればよいのでしょうか?
少なくとも、「Image.Save で ImageFormat.Gif を使う」は使えません。
ImageFormat.Png なら、1bpp 及び 4 bpp についてはそのまま保存できますが、8bpp は 32 bpp として保存されるようです。
ImageFormat.Bmp なら、1bpp、4bpp、8bpp、24bppRgb、32bppArgb といった標準的なピクセル形式はいずれも正しく保存されます。
[訂正] bmp は 32bppArgb をサポートしてませんでしたね。

gif でないと駄目なのなら、なにか他のライブラリを探すことになるでしょう。
引用返信 編集キー/
■48379 / inTopicNo.8)  Re[6]: グレースケールの画像が白黒(2値)かどうかを判定したい
□投稿者/ .SHO (1248回)-(2010/04/04(Sun) 11:50:28)
No48376 (ムウくん さん) に返信

> これは、ファイル保存時にFormat8bppIndexedになってしまったのでしょうか?

です。

> それとも、保存ファイルを読み込むときにFormat8bppIndexedになってしまったのでしょうか?

違います。

> PixelFormatがFormat1bppIndexedのビットマップをファイルに保存した場合、
> 再度ビットマップに読み込むときにビットマップのPixelFormatがFormat1bppIndexedとなるにはどうすればよいのでしょうか?

ImageFormat.Bmpで保存。
Bmpなら、そのまま保存されます。
引用返信 編集キー/
■48381 / inTopicNo.9)  Re[7]: グレースケールの画像が白黒(2値)かどうかを判定したい
□投稿者/ ムウくん (3回)-(2010/04/04(Sun) 13:21:37)
Hongliang様、SHO様、ご回答ありがとうございました。
gif形式で保存してはだめなのですね。
gif形式で保存したところをpng形式で保存するようにしたところ、うまくいきました。
とりあえず、扱う画像は白黒かグレースケールのみなので、Format1bppIndexedで作成した画像はpng形式で保存し、
作成したファイルを開いたときにビットマップのPixelFormatがFormat1bppIndexedであるかどうかで
白黒かグレースケールであるかを判別することにします。
皆様、ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -