• 締切済み

BMPを白黒画像にする方法。

ビットマップを白黒にしたいのですが、どうすればよいか迷っています。 getpixel()関数で色を取って、RGBに分解して、足して3で割って、さらにRGB(c,c,c)とかいう風にすれば、求まるかなと考えたんですが、非常に効率が悪そうなので、どなたかよい方法教えてもらえないでしょうか? おねがいします。 RGBに分解と書きましたが、実際のところどうやって分解すればいいのかなと、そのあたりもよくわかってないので、分解の方法を知っている方がいたらそちらのほうもお願いします。

みんなの回答

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.3

MSDN Libraryをお持ちなら [サポート技術情報]→[Knowledge Base]→[Win32 Software Deveropment Kit]→[Converting Colors Between RGB and HLS (HBS)] という項目があります。 HLSカラースペースのLが「明度」なのでソースが参考になると思います。 COLORREF GetPixel( HDC hdc, // handle to device context int XPos, // x-coordinate of pixel int nYPos // y-coordinate of pixel); こちらのGetPixel()は0x00bbggrr形式の32ビットRGB値を返します。

amplitude
質問者

お礼

御礼が遅くなりまして、すみません。 いまから、libraryを見てみようと思います。 ありがとうございました。

  • g_dori
  • ベストアンサー率47% (330/699)
回答No.2

そこまで色の操作をするならばDIBがベストではないでしょうか。 ビットマップファイルなら扱いも簡単ですし。 ともあれ、参照URLにとっても詳しい説明がありますよ。 「明るさ=R×0.30+G×0.59+B×0.11」 だそうです。 DirectXの関数一つである意味終わるお話だと思いますけど、この辺は自分で作った方が楽しいですよね。 慣れたらCPUのキャッシュサイズを考慮したソースを作れば、処理速度もかなり改善されますよ。

参考URL:
http://www.sm.rim.or.jp/~shishido/
amplitude
質問者

お礼

よいページを紹介していただいてありがとうございます。 さっそく、「明るさ=R×0.30+G×0.59+B×0.11」 をプログラムに取り入れたいと思います。

  • die0413
  • ベストアンサー率12% (18/139)
回答No.1

名前を付けて保存を選んでモノクロビットマップを選択したら白黒にならないですか? そんな事じゃだめですかね?(笑)

関連するQ&A