画像のパレットについて
Posted: 2015年7月30日(木) 00:16
いつもこのHPを参考にプログラムを楽しませてもらっています。
以下の質問があり、初めて書き込みさせていただきました。
状況:
○Windows7 Visual Stdio 2008 C++ でDxlibを使用し、格闘ゲームの製作中
実現したいこと:
○キャラクターは3Dモデリングソフトで作成し、動作ファイルを数1000枚の256色bmpファイル(1024*1024)に連番出力する。その後この連番出力したbmpを「パレット付き」のpng(任意サイズ)に変換する補助プログラムを作成したい(2Pカラー作成のため)
困っていること:
Dxlibで実現できないかと思い、以下のようなtestを実施してみた。
このようにしてみたところ、色をある程度変えることはできるが
髪の色が黒いいろのキャラクターの髪の部分と黒い靴のいろが一緒に変わってしまう。
質問:
ある程度の色のグループごとにオリジナルのパレットを設定したいのですがどうすればいいでしょうか。
元の素材で塗り分けたい色の部分をはっきりと違う色にすることも考えたのですが、それは最終手段にしたいです。
問題は私がMakePAL8ColorSoftImageでパレット用の空画像を作って
BltSoftImageで何を実行しているか理解できなかったため、うまくできないのだと思います。。。
BltSoftImageでパレット画像にコピーした時にパレットの色分けが自動的に近い色でなされている感じですが、この色分けをある程度制御する方法があるか、知りたいです。
そのような便利な関数があるか、パレットの色域を変更する方法があるか、Dxlibでやるのはそもそも見当違いなのか、ご助言いただければ幸いです。
大変お手数おかけします。よろしくお願いいたします。
以下の質問があり、初めて書き込みさせていただきました。
状況:
○Windows7 Visual Stdio 2008 C++ でDxlibを使用し、格闘ゲームの製作中
実現したいこと:
○キャラクターは3Dモデリングソフトで作成し、動作ファイルを数1000枚の256色bmpファイル(1024*1024)に連番出力する。その後この連番出力したbmpを「パレット付き」のpng(任意サイズ)に変換する補助プログラムを作成したい(2Pカラー作成のため)
困っていること:
Dxlibで実現できないかと思い、以下のようなtestを実施してみた。
このようにしてみたところ、色をある程度変えることはできるが
髪の色が黒いいろのキャラクターの髪の部分と黒い靴のいろが一緒に変わってしまう。
質問:
ある程度の色のグループごとにオリジナルのパレットを設定したいのですがどうすればいいでしょうか。
元の素材で塗り分けたい色の部分をはっきりと違う色にすることも考えたのですが、それは最終手段にしたいです。
問題は私がMakePAL8ColorSoftImageでパレット用の空画像を作って
BltSoftImageで何を実行しているか理解できなかったため、うまくできないのだと思います。。。
BltSoftImageでパレット画像にコピーした時にパレットの色分けが自動的に近い色でなされている感じですが、この色分けをある程度制御する方法があるか、知りたいです。
そのような便利な関数があるか、パレットの色域を変更する方法があるか、Dxlibでやるのはそもそも見当違いなのか、ご助言いただければ幸いです。
#include "DxLib.h"
//Dxlib初期化 中略
int w,h;//サイズ用
int handle1,handle2;//ハンドル用
int r,g,b;//各種色変数用
int pltnum;//パレット番号変数
handle = LoadSoftImage( "test.bmp" ) ;// 画像の読み込み
GetSoftImageSize( handle, &w, &h ) ;// 画像のサイズを取得
handle2= MakePAL8ColorSoftImage(w,h);//パレット用空画像
BltSoftImage(0,0,w,h,handle,0,0,handle2);//パレット用画像にコピー
//任意のパレット番号pltnum選択処理 中略
GetPaletteSoftImage( handle2,pltnum, &r, &g, &b, 0 ) ;//任意パレットのRGBを取得
//任意のパレット内部の変えたい部分に数値をセット。例:gを240にする処理 中略
SetPaletteSoftImage(handle2,pltnum,r,240,b,0);
//ここで色が変わるが、同じような色がまとめて変わってしまう。
//位置でも色でもいいが、ある程度色域を自分で決めたい
SaveSoftImageToPng("testa.png",handle2,0);//出力処理
//終了処理、略