私はそれを実装することになりました。 Wikipedia式の直接書き直し。この の実装に問題はありますか?
// a2 over a1
private static int compositeAlpha(int a1, int a2) {
return 255 - ((255 - a2) * (255 - a1))/255;
}
// For a single R/G/B component. a = precomputed compositeAlpha(a1, a2)
private static int compositeColorComponent(int c1, int a1, int c2, int a2, int a) {
// Handle the singular case of both layers fully transparent.
if (a == 0) {
return 0x00;
}
return (((255 * c2 * a2) + (c1 * a1 * (255 - a2)))/a)/255;
}
// argb2 over argb1. No range checking.
public static int compositeColor(int argb1, int argb2) {
final int a1 = Color.alpha(argb1);
final int a2 = Color.alpha(argb2);
final int a = compositeAlpha(a1, a2);
final int r = compositeColorComponent(Color.red(argb1), a1,
Color.red(argb2), a2, a);
final int g = compositeColorComponent(Color.green(argb1), a1,
Color.green(argb2), a2, a);
final int b = compositeColorComponent(Color.blue(argb1), a1,
Color.blue(argb2), a2, a);
return Color.argb(a, r, g, b);
}
ありがとうございました。コンポジットカラーの計算にどのように使用すればよいですか?あなたは単一のピクセルビットマップを描画し、そのピクセルを読み取る必要がありますか? – user1139880
ああ、ねえ。私はそれより良い方法を知らない。 – nmr