forループのピクセルごとにビットマップのアルファ値を変更しようとしています。ビットマップは、別のビットマップのcreateBitmap(source、x、y、w、h)から作成されます。私は少しテストを行ったが、私はアルファを変更するように見えることはできません。それはsetPixelコマンドですか、それともARGBではないビットマップですか?Android - ピクセルごとのアルファを変更する
最後にシンプルなフェードアウトエフェクトを作成したいと思いますが、今のところ私はハーフアルファを使って元のピクセルカラーを参照していません。おかげであなたは:)
_left[1] = Bitmap.createBitmap(TestActivity.photo, 0, 0, 256, 256);
for (int i = 0; i < _left[1].getWidth(); i++)
for (int t = 0; t < _left[1].getHeight(); t++) {
int a = (_left[1].getWidth()/2) - i;
int b = (_left[1].getHeight()/2) - t;
double dist = Math.sqrt((a*a) + (b*b));
if (dist > 20) _left[1].setPixel(i, t, Color.argb(128, 0, 255, 0));
}
がUPDATE助けることができる場合:
オーケー、これは誰もがビットマップを取り、放射状にフェードアウトしたい場合は、私が思いついた結果です。しかし、はい、それはあなたが返します不変ビットマップを使用しているBitmap.createBitmap()
のおかげでルーベン正しい方向への第一歩
public void fadeBitmap (Bitmap input, double fadeStartPercent, double fadeEndPercent, Bitmap output) {
Bitmap tempalpha = Bitmap.createBitmap(input.getWidth(), input.getHeight(), Bitmap.Config.ARGB_8888);
Canvas printcanvas = new Canvas(output);
int radius = input.getWidth()/2;
double fadelength = (radius * (fadeEndPercent/100));
double fadestart = (radius * (fadeStartPercent/100));
for (int i = 0; i < input.getWidth(); i++)
for (int t = 0; t < input.getHeight(); t++) {
int a = (input.getWidth()/2) - i;
int b = (input.getHeight()/2) - t;
double dist = Math.sqrt((a*a) + (b*b));
if (dist <= fadestart) {
tempalpha.setPixel(i,t,Color.argb(255, 255, 255, 255));
} else {
int fadeoff = 255 - (int) ((dist - fadestart) * (255/(fadelength - fadestart)));
if (dist > radius * (fadeEndPercent/100)) fadeoff = 0;
tempalpha.setPixel(i,t,Color.argb(fadeoff, 255, 255, 255));
}
}
Paint alphaP = new Paint();
alphaP.setAntiAlias(true);
alphaP.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
// printcanvas.setBitmap();
printcanvas.drawBitmap(input, 0, 0, null);
printcanvas.drawBitmap(tempalpha, 0, 0, alphaP);
}
'_left [1] .hasAlpha()は何を返しますか? –