- PR -

Bitmap作成時のPaletteの設定方法について

1
投稿者投稿内容
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2006-06-12 09:32
おはようございます。

いつも、お世話になっております。

VB.net2003にて開発を行っております。
VBにてBitmapの作成時に、パレットを指定を行いたいのですが、
方法がわかりません・・・。
Paletteプロパティにて設定が出来るという所まではわかったのですが。。。

サンプルページ等、ご存知でしたらご教授願えませんでしょうか?

下記のページのサンプルを見つけましたが、上手くいかなかったので
投稿させていただきました。

http://www.microsoft.com/japan/msdn/directx/japan/dx9/mxd11.asp

よろしくお願いいたします。

[ メッセージ編集済み 編集者: .net 編集日時 2006-06-12 09:33 ]
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-06-12 10:07
リンクに示されたページは十分にサンプルの用を足していると思います。
// Palette プロパティ取り出して Entries の要素いじって Palette に再設定。
巧く行かないとはどういう事でしょうか?
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2006-06-12 10:17
さっそくのご返信ありがとうございます。

すみません、やりたいことの詳細がもれていました・・・。

// Palette プロパティ取り出して Entries の要素いじって Palette に再設定。
再設定ではなく新規に設定???

BitmapはロジックにてGraphicsオブジェクトを用いて、
動的に作成しています。
その作成時にパレットの設定は出来ますでしょうか?
パレットのRGBに関してはある程度固定で設定したいと思っています。

知識が乏しく、見当違いな質問をしているかも知れませんが、
よろしくお願いいたします。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-06-12 10:55
引用:

引用:

// Palette プロパティ取り出して Entries の要素いじって Palette に再設定。


再設定ではなく新規に設定???


ColorPalette クラスはコンストラクタがないので、Image オブジェクトの Palette プロパティから取り出すしかありません。
そして Palette プロパティはパレットの参照を直接返すのではなく、パレットのクローンを返すので、取り出した ColorPalette を変更しても元の Image には適用されません。Image の Palette に再代入する必要があります。

引用:

BitmapはロジックにてGraphicsオブジェクトを用いて、
動的に作成しています。
その作成時にパレットの設定は出来ますでしょうか?
パレットのRGBに関してはある程度固定で設定したいと思っています。


Graphics クラスに Bitmap を作成するメソッドなんてありませんよね?
単に Bitmap のコンストラクタを使って new しているだけだと判断します。

まず、当然の事ながら全ての画像がパレットを使用するわけではありません。例えば 1 ピクセルに 24 ビットを使って RGB を表現するビットマップでは、各ピクセルに直接色データが存在するためパレットは使用されません。
これを決定するのが PixelFormat プロパティです。Bitmap のコンストラクタにも PixelFormat 列挙体を引数に取るものが存在します。
PixelFormat 列挙体のメンバの内、〜〜Indexed となっているのがパレットを使用する画像形式です。例えば Format8bppIndexed は各ピクセルを 8 ビットのカラーインデックスで表現し、そのインデックスが指すのがパレットテーブルです。この場合パレットテーブルには 256(8bit)の色が格納されます。ちなみに各色は 8*3 の 24bit 。

また、GDI+(System.Drawing の下にある描画フレームワーク)では、パレットを使用する画像については Graphics を作成する事はできません。
これらの画像については、Bitmap.LockBits を使用して直接バイトデータを変更する必要があります。

さて、本当に .net さんがなさりたいのはパレットつき画像なんでしょうか?
意識しなければ大抵は直接色データを置いていく(パレットを使わない)画像になると思いますが。Bitmap を new した場合も、指定しなければ PixelFormat は 24bppRgb になりますし。

[ メッセージ編集済み 編集者: Hongliang 編集日時 2006-06-12 10:56 ]
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2006-06-12 11:13
本当に何度もありがとうございます。

//ColorPalette クラスはコンストラクタがないので、Image オブジェクトの Palette プロパティから取り出すしかありません。
そして Palette プロパティはパレットの参照を直接返すのではなく、パレットのクローンを返すので、取り出した ColorPalette を変更しても元の Image には適用されません。Image の Palette に再代入する必要があります。

詳しくご説明いただき、ありがとうございました。


ちなみに、やりたいことなのですが、現在確かにBitmapをnew
しただけで、何も指定していなので、24bppRgbで作成されます。
しかし、24bppRgbでは他に使用しているミドルウェアで扱えないという
不具合が発生しました。。。

そこで、24bppRgbを256(8bit)の色あたりまで、減色したいと思ったのですが、
その方法がわからず、投稿させていただきました。

PixelFormatにて256(8bit)を指定すると、Graphicsを作成時にエラーが発生するのは
下記が原因だったのでしょうか?

//また、GDI+(System.Drawing の下にある描画フレームワーク)では、パレットを使用する画像については Graphics を作成する事はできません。
1

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