プログラミングノート

一からものを作ることが好きなエンジニアの開発ブログです。

画像の透過処理について

DoJaのように便利なメソッドはありませんが、ピクセルを直接変更して透過できました。
エミュレータでしか確認できないので実機で動くかは微妙ですが。

//透過させる画像
Image img = イメージ取得;

//透過する色(RGB)
int c[] = new int[]{255,255,255};

int width = img.getWidth();
int height = img.getHeight();

int[] rgb = new int[width * height];
img.getRGB(rgb, 0, width, 0, 0, width, height);

for(int i = 0; i < rgb.length; i++){
  //アルファ値を書き換え
  if(rgb[i] == (0xFF << 24 | c[0] << 16 | c[1] << 8 | c[2])){
    rgb[i] = rgb[i] & 00 << 24;
  }
}

//このimgを描画すれば透過されている
img = Image.createRGBImage(rgb, width, height, true);


また、DoJaのような半透明矩形を描画したい場合も同じような感じで実現できました。

//描画する色(RGBA)
int c[] = new int[]{255,255,255,100};
int argb = c[3] << 24 | c[0] << 16 | c[1] << 8 | c[2];

//矩形のサイズ
int width = 200;
int height = 200;

int size = width * height;
int[] px = new int[size];
for(int i=0; i<size; i++){
  px[i] = argb;
}

Image img = Image.createRGBImage(px, width, height, true);