赤と青の符号なしバイトを組み合わせてブレンドを最適化するにはどうすればよいですか?

Ariston Giltedged

RGBブレンド用にこの機能があります。私がやろうとしているのは、操作を減らすために赤と青を組み合わせることです。

これが元のコードです:

#define REDMASK (0xff0000)
#define GREENMASK (0x00ff00)
#define BLUEMASK (0x0000ff)
typedef unsigned int Pixel;
inline Pixel AddBlend( Pixel a_Color1, Pixel a_Color2 )
{
    const unsigned int r = (a_Color1 & REDMASK) + (a_Color2 & REDMASK);
    const unsigned int g = (a_Color1 & GREENMASK) + (a_Color2 & GREENMASK);
    const unsigned int b = (a_Color1 & BLUEMASK) + (a_Color2 & BLUEMASK);
    const unsigned r1 = (r & REDMASK) | (REDMASK * (r >> 24));
    const unsigned g1 = (g & GREENMASK) | (GREENMASK * (g >> 16));
    const unsigned b1 = (b & BLUEMASK) | (BLUEMASK * (b >> 8));
    return (r1 + g1 + b1);
}`

そして、これが私がこれまでに得たものです。私の問題は、色が正しくブレンドされていないことです。私はここで何が間違っているのですか?

typedef unsigned int Pixel;

inline Pixel AddBlend( Pixel a_Color1, Pixel a_Color2 ){
    const unsigned int rb = ( ( a_Color1 & 0xff00ff ) + ( a_Color2 & 0xff00ff ) );
    const unsigned int g = ( a_Color1 & GREENMASK ) + ( a_Color2 & GREENMASK );

    const unsigned rb1 = ( rb & 0xff00ff ) | ( 0xff00ff  * ( rb >> 8 ));    
    const unsigned g1 = (g & GREENMASK)  | (GREENMASK * (g >> 16));
     return (rb1 + g1);
}
1201ProgramAlarm

(REDMASK * (r >> 24))元のコード型部分は、オーバーフローするクランプ値を処理します。これは1つのカラーパーツで機能しますが、2つでは機能しません。これを2つの部分に分割する必要があります。1つは赤のオーバーフローを処理するためのもので、もう1つは青のためのものです。赤のオーバーフローの処理は元の方法と同じように実行できますが、青のオーバーフローは、赤の寄与を無視するために少し調整する必要があります。

BLUE_MASK * ((rb & 0x100) >> 8)

これにより、

const unsigned rb1 = (rb & 0xff00ff) | (REDMASK * (r >> 24)) | (BLUE_MASK * ((rb & 0x100) >> 8));

赤と青の間にオーバーフローが占める可能性のあるギャップ(緑のビット)があるため、このように2つの色を組み合わせると機能します。赤/緑または緑/青でこれを試した場合、下位バイトに格納されている部分のオーバーフローは、上位バイトに格納されている部分の値と衝突します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

オーバーレイマウントを使用して、複数のディレクトリを異なるサブディレクトリと組み合わせるにはどうすればよいですか?

分類Dev

flavorDimensionsを使用してフレーバーの組み合わせごとに異なるapplicationIdを設定するにはどうすればよいですか?

分類Dev

テンプレートと組み合わせてバイナリ算術演算子を使用するにはどうすればよいですか?

分類Dev

gtrendsRを取得して、90日間の複数のトレンドデータを組み合わせるにはどうすればよいですか?

分類Dev

ゾーン化されていない日付とタイムゾーンを「組み合わせる」にはどうすればよいですか?

分類Dev

別のテーブル(Django)でフィールドの組み合わせを正しく適用するにはどうすればよいですか?

分類Dev

DataFrame(パンダ)のインデックスとして組み合わせまたは文字列を使用するにはどうすればよいですか?

分類Dev

列の組み合わせを表示メンバーとして表示するにはどうすればよいですか?

分類Dev

カバレッジ結果とtoxを組み合わせるにはどうすればよいですか?

分類Dev

バイナリの組み合わせの平均を取得するにはどうすればよいですか?

分類Dev

赤、緑、青のdivを組み合わせるときに、画面のミックスブレンドモードを使用して白を取得する

分類Dev

情報を組み合わせて特定の列の値を合計するコードを簡略化するにはどうすればよいですか?

分類Dev

情報を組み合わせて特定の列の値を合計するコードを簡略化するにはどうすればよいですか?

分類Dev

与えられたドロップダウンメニューから選択されたすべての可能な組み合わせについて、ウェブサイトから結果を「スクレイプ」するPythonプログラムを作成するにはどうすればよいですか?

分類Dev

最も効率的な方法で最も利益と密度の高い組み合わせを計算するにはどうすればよいですか?

分類Dev

繰り返される値を含む組み合わせを最適化するにはどうすればよいですか?

分類Dev

継承と組み合わせてオブザーバーパターンを実現するにはどうすればよいですか?

分類Dev

Juliaでmap()とrand()を適切に組み合わせるにはどうすればよいですか?

分類Dev

カルカースカレンダーと組み合わせてnotify-sendコマンドを使用するにはどうすればよいですか?

分類Dev

JavaまたはProcessingを使用して、画像から赤、青、緑などの単色のみを検出するにはどうすればよいですか?

分類Dev

データフレーム内の行のすべての組み合わせに関数を適用するにはどうすればよいですか?

分類Dev

v-forとv-modelを組み合わせてオブジェクトのリストを編集するにはどうすればよいですか?

分類Dev

別のテーブルと結合している巨大なテーブルの更新を最適化するにはどうすればよいですか?

分類Dev

文字列と数字の組み合わせからバイトストリームを設定するにはどうすればよいですか?

分類Dev

繰り返しなしで文字セットのすべての組み合わせを生成するにはどうすればよいですか?

分類Dev

findコマンドとgzipを組み合わせるにはどうすればよいですか

分類Dev

findコマンドとgzipを組み合わせるにはどうすればよいですか

分類Dev

Laravelと複数のテーブルを組み合わせるにはどうすればよいですか?

分類Dev

コマンドモードでTabキーを使用してマップの組み合わせを作成するにはどうすればよいですか?

Related 関連記事

  1. 1

    オーバーレイマウントを使用して、複数のディレクトリを異なるサブディレクトリと組み合わせるにはどうすればよいですか?

  2. 2

    flavorDimensionsを使用してフレーバーの組み合わせごとに異なるapplicationIdを設定するにはどうすればよいですか?

  3. 3

    テンプレートと組み合わせてバイナリ算術演算子を使用するにはどうすればよいですか?

  4. 4

    gtrendsRを取得して、90日間の複数のトレンドデータを組み合わせるにはどうすればよいですか?

  5. 5

    ゾーン化されていない日付とタイムゾーンを「組み合わせる」にはどうすればよいですか?

  6. 6

    別のテーブル(Django)でフィールドの組み合わせを正しく適用するにはどうすればよいですか?

  7. 7

    DataFrame(パンダ)のインデックスとして組み合わせまたは文字列を使用するにはどうすればよいですか?

  8. 8

    列の組み合わせを表示メンバーとして表示するにはどうすればよいですか?

  9. 9

    カバレッジ結果とtoxを組み合わせるにはどうすればよいですか?

  10. 10

    バイナリの組み合わせの平均を取得するにはどうすればよいですか?

  11. 11

    赤、緑、青のdivを組み合わせるときに、画面のミックスブレンドモードを使用して白を取得する

  12. 12

    情報を組み合わせて特定の列の値を合計するコードを簡略化するにはどうすればよいですか?

  13. 13

    情報を組み合わせて特定の列の値を合計するコードを簡略化するにはどうすればよいですか?

  14. 14

    与えられたドロップダウンメニューから選択されたすべての可能な組み合わせについて、ウェブサイトから結果を「スクレイプ」するPythonプログラムを作成するにはどうすればよいですか?

  15. 15

    最も効率的な方法で最も利益と密度の高い組み合わせを計算するにはどうすればよいですか?

  16. 16

    繰り返される値を含む組み合わせを最適化するにはどうすればよいですか?

  17. 17

    継承と組み合わせてオブザーバーパターンを実現するにはどうすればよいですか?

  18. 18

    Juliaでmap()とrand()を適切に組み合わせるにはどうすればよいですか?

  19. 19

    カルカースカレンダーと組み合わせてnotify-sendコマンドを使用するにはどうすればよいですか?

  20. 20

    JavaまたはProcessingを使用して、画像から赤、青、緑などの単色のみを検出するにはどうすればよいですか?

  21. 21

    データフレーム内の行のすべての組み合わせに関数を適用するにはどうすればよいですか?

  22. 22

    v-forとv-modelを組み合わせてオブジェクトのリストを編集するにはどうすればよいですか?

  23. 23

    別のテーブルと結合している巨大なテーブルの更新を最適化するにはどうすればよいですか?

  24. 24

    文字列と数字の組み合わせからバイトストリームを設定するにはどうすればよいですか?

  25. 25

    繰り返しなしで文字セットのすべての組み合わせを生成するにはどうすればよいですか?

  26. 26

    findコマンドとgzipを組み合わせるにはどうすればよいですか

  27. 27

    findコマンドとgzipを組み合わせるにはどうすればよいですか

  28. 28

    Laravelと複数のテーブルを組み合わせるにはどうすればよいですか?

  29. 29

    コマンドモードでTabキーを使用してマップの組み合わせを作成するにはどうすればよいですか?

ホットタグ

アーカイブ