私のC++アプリケーションでは、赤、緑、青の値でpngイメージの色があります。私はこれらの値を3つの整数で保存しました。C++でRGBカラー値を16進値に変換する方法は?
RGB値を等価の16進数値に変換するにはどうすればよいですか?この形式で0x1906
EDITのようなものの
例:私はGLuintとして形式を保存します。
私のC++アプリケーションでは、赤、緑、青の値でpngイメージの色があります。私はこれらの値を3つの整数で保存しました。C++でRGBカラー値を16進値に変換する方法は?
RGB値を等価の16進数値に変換するにはどうすればよいですか?この形式で0x1906
EDITのようなものの
例:私はGLuintとして形式を保存します。
ストア(long
など)は、少なくとも24ビットの符号なし整数に各色の適切なビット:
unsigned long createRGB(int r, int g, int b)
{
return ((r & 0xff) << 16) + ((g & 0xff) << 8) + (b & 0xff);
}
今の代わりに:
unsigned long rgb = 0xFA09CA;
あなたが行うことができます:
unsigned long rgb = createRGB(0xFA, 0x09, 0xCA);
上記はアルファチャンネルを扱わないことに注意してください。あなたはまた、アルファ(RGBA)をエンコードする必要がある場合は、代わりにこれを必要とする:それは何が必要かどう
unsigned long createRGBA(int r, int g, int b, int a)
{
return ((r & 0xff) << 24) + ((g & 0xff) << 16) + ((b & 0xff) << 8)
+ (a & 0xff);
}
はGLuint
でunsigned long
を交換してください。
あなたは文字列を構築したい場合、あなたはおそらくsnprintf()
を使用することができます。
const unsigned red = 0, green = 0x19, blue = 0x06;
char hexcol[16];
snprintf(hexcol, sizeof hexcol, "%02x%02x%02x", red, green, blue);
これは私が唯一の4桁の数字であるあなたの例の色を(解釈することを選んだ方法である文字列001906" in
hexcol`を、構築しますそれは6でなければなりません)。
GL_ALPHA
プリプロセッサシンボルがOpenGLのヘッダーファイルで0x1906
であると定義されていることを混乱させるようです。これは色ではなく、のフォーマット指定子がピクセルを扱うOpenGL API呼び出しで使用されるため、期待するフォーマットがわかります。それは文字列を作成するので
あなたがメモリにPNGイメージを持っている場合は、GL_ALPHA
フォーマットは、画像(存在する場合)でのみアルファ値に対応する、上記は全く異なるものです。 OpenGLは文字列を必要とせず、必要な形式でデータを保持するメモリ内バッファが必要です。
これがどのように機能するかについては、glTexImage2D()
マニュアルページを参照してください。
あなたは私の問題を正確に持っています。これは私が立ち往生したところです。私はpng画像のPLTEチャンクから得たrgb値を持っています。テクスチャのフォーマットを設定したい。しかし、画像のカラータイプは3で、インデックスカラーです。通常、0(PNG_COLOR_TYPE_GRAY)のような他のカラータイプでは、テクスチャフォーマットを0x1909(GL_LUMINANCE)に設定します。しかし、私はカラータイプ3のために何をすべきですか?私はそれについての記事を作ったhttp://stackoverflow.com/questions/14373099/png-image-texture-format-for-color-type-3 – Tahlil
この数字では、「0x1906」はどのビットが異なる色を表していますか? –
私はそれについては分かりません。しかし、それはRGBシーケンスのようにすべきです!あなたの質問に答えるかどうかは分かりません。ごめんなさい! – Tahlil
お待ちください、あなたは何らかのフォーマットに変換したいのですが、そのフォーマットが何か分かりませんか?その問題を解決する方法は1つだけあり、誰もそれを本当に助けることはできません。 –