2013-01-17 17 views
7

私のC++アプリケーションでは、赤、緑、青の値でpngイメージの色があります。私はこれらの値を3つの整数で保存しました。C++でRGBカラー値を16進値に変換する方法は?

RGB値を等価の16進数値に変換するにはどうすればよいですか?この形式で0x1906

EDITのようなものの

例:私はGLuintとして形式を保存します。

+1

この数字では、「0x1906」はどのビットが異なる色を表していますか? –

+0

私はそれについては分かりません。しかし、それはRGBシーケンスのようにすべきです!あなたの質問に答えるかどうかは分かりません。ごめんなさい! – Tahlil

+0

お待ちください、あなたは何らかのフォーマットに変換したいのですが、そのフォーマットが何か分かりませんか?その問題を解決する方法は1つだけあり、誰もそれを本当に助けることはできません。 –

答えて

17

ストア(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); 
} 

GLuintunsigned longを交換してください。

7

あなたは文字列を構築したい場合、あなたはおそらく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()マニュアルページを参照してください。

+0

あなたは私の問題を正確に持っています。これは私が立ち往生したところです。私は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

関連する問題