1

A がアルファ、B、G、R が青、緑、赤の 0xAABBGGRR の形式で unsigned int (0xFF998877 など) を使用して、何かの色を変更しようとしています。

しかし、私が渡している色をゆっくりと暗くしたり明るくしたりするには、どうすればよいのでしょうか。

この方法で unsigned int を使用した経験があまりないため、私の解決策は単純に値を 1 減らすことでしたが、これは奇妙な結果になりました。RGB要素のみを変更し、アルファを一定に保つ良い方法はありますか? 私はわずかな調査で、他の符号なし整数を掛け合わせて最終結果を生成できることを発見しました (例: (0xFF * 0x99 * 0x99 * 0x99))。

どんな助けでも大歓迎です!

4

2 に答える 2

2

あなたがする必要があるのは、色をHSL(またはHSV)に変換してから、必要に応じて明度(または値)を変更することです. 次に、RGB に戻す必要があります。

インターネット上には、この変換を行うために使用できる膨大な量のコードがあります。それが難しい場合は、独自のコードを提供できます。

于 2011-12-05T12:25:44.417 に答える
0

C++ での色操作については何も知りませんが、単純にビットマスクを使用することはできませんか? または、4 UINT8 (unsigned char) を使用して色を表すクラスを作成しますか? そうすれば、さまざまなチャネルのあらゆる種類の操作を簡単に作成できます。

それは素晴らしい API にもなります。

Colour c(128,50,50,0);
c.saturateRed(10);
c.darkerBySteps(3);
c.desaturateGreen(10);
UINT32 rawColVal = c.getRawValue();
于 2011-12-05T12:31:34.240 に答える