GetColorで指定する方法 直接指定する方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dic
記事: 658
登録日時: 14年前
住所: 宮崎県
連絡を取る:

GetColorで指定する方法 直接指定する方法

#1

投稿記事 by dic » 14年前

今、新たに作っているのですが
DxLibを使用してます

そこで、DrawBox() 関数で 第5引数に色を指定しますが、ここに入れるソースコードとして
int型があります
なので、DrawBox( 0, 0, 200, 200, 0x001122, TRUE ); とできます
この場合、指定した色 0x001122 は環境依存になるのでしょうか?

DxLibのサンプルでは DrawBox( 0, 0, 200, 200, GetColor(0,1,2), TRUE );
と、GetColor() 関数を使用しているので、気になります

ご存知の方、返答くださると助かります

アバター
GRAM
記事: 164
登録日時: 14年前
住所: 大阪

Re: GetColorで指定する方法 直接指定する方法

#2

投稿記事 by GRAM » 14年前

GetColorを使った場合256色モードのときに一番近い色を自動的に選択してくれます
そうでないときは直接入力したものと同じ値が返ります

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: GetColorで指定する方法 直接指定する方法

#3

投稿記事 by h2so5 » 14年前

リファレンスにカラービット数に依存すると書いてあります。

dic
記事: 658
登録日時: 14年前
住所: 宮崎県
連絡を取る:

Re: GetColorで指定する方法 直接指定する方法

#4

投稿記事 by dic » 14年前

>>GRAMさん
自動的に近い色に変換されるのですね


あと、説明不足でした
デスクトップ環境が16ビットのときに 色を 0x001122 と指定したときと
デスクトップ環境が32ビットのときに 色を 0x001122 と指定したときと
GetColor()関数で指定したときと
違いはでるのでしょうか?


== 同時投稿
>>リファレンスにカラービット数に依存すると書いてあります。
とあるので


色を0x001122と直接埋め込むと、環境依存にならないか?ということです


== 編集
0x0000FF と仮に指定して
16ビットでは青だったが32ビットでは赤になったという現象が発生する
というのが環境依存という意味で合っているでしょうか?

アバター
GRAM
記事: 164
登録日時: 14年前
住所: 大阪

Re: GetColorで指定する方法 直接指定する方法

#5

投稿記事 by GRAM » 14年前

あぁすみません。
DxLibのプロジェクトを直接読んでたんですけどNS_GetColorのelse以下を流し読みしちゃったみたいです。
どうやら16ビットの場合も補正してくれるみたいですね。ふつうにビットマスクかけてると思ったら現在のビット数を参照しているようでした。
GetColorを使ったほうがよいのですね。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: GetColorで指定する方法 直接指定する方法

#6

投稿記事 by softya(ソフト屋) » 14年前

こう言うのは、試してみると早いです。

コード:

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
			 LPSTR lpCmdLine, int nCmdShow )
{
	int sx = GetSystemMetrics(SM_CXSCREEN);	//横幅取得
	int sy = GetSystemMetrics(SM_CYSCREEN);	//縦幅取得
	
	// 画面モードの変更
	SetGraphMode( sx , sy , 32 ) ;

	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// BOX描画
	DrawBox( 0, 0, sx, sy, GetColor(255,255,255), TRUE );
	DrawBox( 0, 0, 200, 200, 0x00112F, TRUE );
	DrawFormatString( 0, 0, GetColor(255,0,0), "%X %X", GetColor(0,0,255), GetColor(255,0,0) );

	// キー待ち(『WaitKey』を使用)
	WaitKey() ;

	// 画面モードの変更
	SetGraphMode( sx , sy , 16 ) ;

	// BOX描画
	DrawBox( 0, 0, sx, sy, GetColor(255,255,255), TRUE );
	DrawBox( 0, 0, 200, 200, 0x00112F, TRUE );
	DrawFormatString( 0, 0, GetColor(255,0,0), "%X %X", GetColor(0,0,255), GetColor(255,0,0) );

	// キー待ち(『WaitKey』を使用)
	WaitKey() ;

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}
結論から言えば環境依存というよりは、指定カラービット数依存です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
GRAM
記事: 164
登録日時: 14年前
住所: 大阪

Re: GetColorで指定する方法 直接指定する方法

#7

投稿記事 by GRAM » 14年前

softya(ソフト屋) さんが書きました:こう言うのは、試してみると早いです。
はははw全くその通りですね。大事なことを忘れていました。

dic
記事: 658
登録日時: 14年前
住所: 宮崎県
連絡を取る:

Re: GetColorで指定する方法 直接指定する方法

#8

投稿記事 by dic » 14年前

>>GRAMさん
>>softyaさん
貼られているソースコードで実行して試したところ、たしかに色が変化しますね
実際にやるという大事なことでしたw
なぜ、気づかなかったんだろう

解決しました ありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る