- PR -

Bitmapのカラーパレットについて

投稿者投稿内容
Hidering
常連さん
会議室デビュー日: 2007/05/22
投稿数: 33
投稿日時: 2007-07-25 08:53
Hongliangさん、れいさんご回答ありがとうございます。

お二人のご指摘の通り、ImageAttributesクラスとColorMapクラスを使用したら簡単にしかも高速に実現することができました。ありがとうございます。

れいさんからの

引用:
Image.Paletteプロパティからパレットを取得するのではだめなのですか?



についてですが、ストリームから取得するときにPixelFormatを指定できないため
引用:
Dim bmpBuffer As New Bitmap(ms, True)


自動的に作成したBitmapがPixelFormat.Format32bppArgbとなってしまい、
これが原因だと思うのですが、パレットのデータが空になってしまします。

話が戻ってしまいますが、前回の私の書き込みのようにパレットのデータを取得する
必要が今後でてきそうです。何か良い方法はありますでしょうか?
パレット付のデータだと分かっていて、ストリーム(の途中)から画像データを
取得する場合のパレットデータが欲しいです。

前回の私の書き込んだプログラムでできると思ったのですが、
引用:
// 8bppIndexed なら GIF の方が扱いやすそうだな。


引用:
一度GIFにして誤魔化したことが…


のGIFにするというのはどういった方法でしょうか?

良いアドバイスをお願いします。
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2007-07-25 10:08
今日は

カラーパレツトの取り出しだけなら
Image img = Image.FromStream(ストリーム);
カラーパレツト = img.Palette;
で出来きませんか。

れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-07-25 11:35
引用:

Hideringさんの書き込み (2007-07-25 08:53) より:
についてですが、ストリームから取得するときにPixelFormatを指定できないため
引用:
Dim bmpBuffer As New Bitmap(ms, True)





icmで色が変更されてるか
msにパレットが入ってないか
どちらかではないでしょうか?

ストリームでもpixelformat指定できなくても
パレットは入ります。

引用:

パレット付のデータだと分かっていて、ストリーム(の途中)から画像データを
取得する場合のパレットデータが欲しいです。



パレット付きのデータならパレットは付きます。

引用:
一度GIFにして誤魔化したことが…


減色アルゴリズムを書くのがめんどくさかったので
一度gifで保存して減色したというだけの話です。
IIJIMAS
ベテラン
会議室デビュー日: 2006/12/06
投稿数: 77
投稿日時: 2007-07-25 12:59
バイナリエディタでbmpファイルを開いて
Bitmap Structures
http://msdn2.microsoft.com/en-us/library/ms532301.aspx
だとか
WinGDI.h
(私の環境ではC:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinGDI.hとか
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include
にあります。)
にある構造体の定義と
と見比べてみればbmpファイルの情報がいろいろとわかりますよ。


[ メッセージ編集済み 編集者: IIJIMAS 編集日時 2007-07-25 13:03 ]
Hidering
常連さん
会議室デビュー日: 2007/05/22
投稿数: 33
投稿日時: 2007-07-30 08:52
rvmxさん、れいさん、IIJIMASさんご回答ありがとうございます。

取得したかった画像データはPNGフォーマットのものですが、
グラフィックソフトで256色に減色する等して、ソフト上でパレットが表示されていても
保存時はパレット情報は吐き出されない(場合が多い?)ため
パレット情報が存在しないという結論に至りました。
複数のソフトでためしたのですが、PNG形式でパレットが用いられるのは
稀ということでしょうか?

もし、PNG形式のものでパレット付の画像データが保存できるソフトを
ご存知の方がいらっしゃったら教えてください。

IIJIMASさん
Bitmapの情報をいろいろと調べてみます。貴重な情報ありがとうございました。
IIJIMAS
ベテラン
会議室デビュー日: 2006/12/06
投稿数: 77
投稿日時: 2007-07-30 10:17
引用:

Hideringさんの書き込み (2007-07-30 08:52) より:
rvmxさん、れいさん、IIJIMASさんご回答ありがとうございます。

取得したかった画像データはPNGフォーマットのものですが、
グラフィックソフトで256色に減色する等して、ソフト上でパレットが表示されていても
保存時はパレット情報は吐き出されない(場合が多い?)ため
パレット情報が存在しないという結論に至りました。
複数のソフトでためしたのですが、PNG形式でパレットが用いられるのは
稀ということでしょうか?

もし、PNG形式のものでパレット付の画像データが保存できるソフトを
ご存知の方がいらっしゃったら教えてください。


たとえば、WindowsXPに付属しているPaintでも「C:\WINDOWS\シャボン.bmp」を開いて名前を付けて保存時に「png形式」で別のファイルに保存すれば、そのファイルには
前のスレッド 件名:パレット付き画像のストリームからの取り込みについて
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=40354&forum=7&7
でも書いたとおりバイナリエディタで開くとPLTE(50 4C 54 45)がありますよ。
bmpではIndexedのbmpとなっていた場合にPLTEのあるpngに変換されるのだと思います。

引用:

Bitmapの情報をいろいろと調べてみます。貴重な情報ありがとうございました。


このスレッドに書いたリンク先はビットマップ形式(.bmpなど)の情報ですよ。
PNG形式であれば前のスレッドにも書いた
PNG (Portable Network Graphics) Specification
http://www.w3.org/TR/REC-png-multi.html
と関連リンクをご参照ください。
Hidering
常連さん
会議室デビュー日: 2007/05/22
投稿数: 33
投稿日時: 2007-08-02 09:36
IIJIMASさん。ご回答ありがとうございました。

引用:
たとえば、WindowsXPに付属しているPaintでも「C:\WINDOWS\シャボン.bmp」を開いて名前を付けて保存時に「png形式」で別のファイルに保存すれば



上記の方法でパレット付きのPNGファイルを作成することができました。

悩んでいたところが解決できそうです。
ありがとうございました。


スキルアップ/キャリアアップ(JOB@IT)