- - PR -
パレット付き画像のストリームからの取り込みについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-07-23 09:27
下記の様にしてストリームからパレット付き画像を読み込んでるのですが、
パレットのデータが取得できません。 Dim mstream As New MemoryStream(bytImageBuffer) mstream.Flush() Dim bmpBuffer As New Bitmap(mstream) 何か足りないのでしょうか? 他にストリームからパレット付きの画像データを取得できる方法はありますか? | ||||
|
投稿日時: 2007-07-23 10:26
このご投稿内容だけでは回答を得るには情報が不足していると思います。
bytImageBufferの中身はどのように作られたものですか。(本当にパレット付き画像なのでしょうか。) bmpBuffer.Paletteを参照して何かエラーが起きたのでしょうか、それともNothingだったのでしょうか。 | ||||
|
投稿日時: 2007-07-23 10:57
IIJIMASさん。早速のご回答ありがとうございます。
もう少し詳しくソースを載せますね。 読み込んだ画像は256色のパレットを持っています。 hStream = New System.IO.FileStream(strFname, IO.FileMode.Open) hReader = New System.IO.BinaryReader(hStream) Dim bytImageBuffer(ImageLength - 1) As Byte (省略) '↓ストリームの途中から読み取り hReader.Read(bytImageBuffer, 0, ImageLength) Dim mstream As New MemoryStream(bytImageBuffer) mstream.Flush() Dim bmpBuffer As New Bitmap(mstream) Dim pltBuffer As System.Drawing.Imaging.ColorPalette pltBuffer = bmpBuffer.Palette '↑ここではエラーは起きません '但し、↓が0になってしまいます。 'pltBuffer.Entries.Length 色情報は正しく取得できています。ただ、パレットデータが取得できません。 宜しくお願いします。 | ||||
|
投稿日時: 2007-07-23 13:27
やはりその元のデータが「パレット付き画像」ではないのではないでしょうか。
私の手元のWindows XPのC:\WINDOWSにある画像で >pltBuffer.Entries.Length を試してみましたが、 たとえば、 グリーン ストーン.bmpは232 大草原の風.bmpは91 シャボン.bmpは97 となりますよ。 元の画像はどのように作成しましたか。 | ||||
|
投稿日時: 2007-07-23 14:52
元画像はアイコンに格納されているPNG形式のものです。
ファイルのヘッダーを普通に hReader.ReadByte 等で読み込んだ後にPNG圧縮されたアイコンの画像データを読み込もうとしています。 PNG形式のパレット情報は bmpBuffer.Palette には格納されないのでしょうか? だとすれば、パレットの情報はどこから取得すればよいのでしょう。 宜しくお願いします。 | ||||
|
投稿日時: 2007-07-23 16:03
PNG形式でもパレット情報があれば格納されると思います。 PNGファイルをバイナリエディタで開いて PLTEチャンクの"PLTE"があるかどうか確かめてみてはどうでしょうか。 16進表示で 50 4C 54 45 となります。 なければ「パレット情報」はないということです。 参考リンク: PNG (Portable Network Graphics) Specification http://www.w3.org/TR/REC-png-multi.html | ||||
|
投稿日時: 2007-07-23 16:39
IIJIMASさん詳しいご回答ありがとうございます。
早速、データを調べたところ、PLTEチャンクは存在しませんでした。 ところが、ネットでダウンロードしたフリーの画像処理ソフトで開くと 256色のパレットが確かに表示されます。 使用した画像もそのソフトで作成したものなので、 このソフトがPNG形式の画像を読み込むときは 独自の方法でパレット情報を生成していると考えて良いのでしょうか? | ||||
|
投稿日時: 2007-07-23 17:00
>独自の方法でパレット情報を生成していると考えて良いのでしょうか?
たぶんそうだと思います。 結局、ピクセルのデータをすべて読めば、手間はかかりますが似たようなことができると思います。 >ところが、ネットでダウンロードしたフリーの画像処理ソフトで開くと ところでそのソフトとは何でしょうか、教えていただいてもそれがどうパレット情報を生成しているかまでわからないとは思いますが… |