for 루프에서 픽셀 당 비트 맵의 알파 값을 변경하려고합니다. 비트 맵은 다른 비트 맵의 createBitmap (source, x, y, w, h)에서 만들어집니다. 약간의 테스트를했는데 알파를 변경할 수 없습니다. 그것은 setPixel 명령입니까 사실 비트 맵은 ARGB가 아닙니까?안드로이드 - 픽셀 당 알파 변경
마지막으로 단순한 페이드 아웃 효과를 만들고 싶지만 현재는 절반의 알파를 가진 초록색 픽셀 색상을 참조하지 않습니다. 당신이 도울 수 있다면 감사합니다 :)
_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 :
좋아이 나는 사람이 비트 맵을 방사상으로 페이드 아웃하고자하는 경우 해낸 결과입니다. 그러나 예 당신이 반환에게 불변 비트 맵을 사용하는 올바른 방향
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()'는 무엇을 반환합니까? –