1. ホーム
  2. java

[解決済み] なぜ、この0xff000000をフィルターに書き込むのか、誰か教えてください。

2022-02-10 06:24:53

質問

以下はグレースケールフィルタのコードです。

class GrayScale extends RGBImageFilter {
  @Override
    public int filterRGB(int x, int y, int rgb) {
    int a = rgb & 0xff000000;
    int r = (rgb >> 16) & 0xff;
    int g = (rgb >> 8) & 0xff;
    int b = rgb & 0xff;
    rgb = (r * 77 + g * 151 + b * 28) >> 8; 
    return a | (rgb << 16) | (rgb << 8) | rgb;
    }
}

解決方法は?

入力の形式は 0xAARRGGBB ここで AA はアルファ値(透明度)です。 RR は赤です。 GG は緑、そして BB は青色成分です。これは16進数なので、00からFF(255)までの値です。

ご質問は、アルファ値の抽出についてです。この行は

int a = rgb & 0xFF000000

のような値を考えた場合 0xFFFFFFFF (白)のようになります。 AND は、元の色とマスクの両方で設定されているビットをすべて返します。 0xFF または255(正確には)です。