Android Bitmap setPixel не работает правильно?(установите значение, затем прочитайте другое значение) - PullRequest
2 голосов
/ 08 августа 2011

Я использую setPixel (), чтобы установить пиксель на определенное значение, но затем, когда я вызываю getPixel для того же пикселя сразу после него, он возвращает другое значение.

Работает нормально, когда альфа == 255, но любое другое значение дает другое значение;

Это было проверено на Asus Transformer, Honeycomb 3.2

int newPixel=Color.argb(alpha, red, green, blue);
if(x==74&&y==86){
    Log.w("PuzzleMaker","newPixel:"+newPixel+","+image.getConfig().name()+","+image.isMutable());
}
image.setPixel(x,y,newPixel);
if(x==74&&y==86){
    int testPixel=image.getPixel(x, y);
    Log.w("PuzzleMaker","testPixel:"+testPixel);
}

Вход:

newPixel: 13426418,ARGB_8888,true
testPixel: -16777216

2 числа в журнале должны быть одинаковыми.

Ответы [ 2 ]

3 голосов
/ 09 августа 2011

Оказалось, что есть очень простое решение. Я понял, что метод setPixel () умножает значения красного, зеленого и синего на альфа, а затем только устанавливает r, g, b.

Просто вызов image.setHasAlpha (true) исправляет это, поэтому он устанавливает все 4 значения.

0 голосов
/ 08 августа 2011

Я думаю, что это связано с некоторыми странностями в том, как Android обрабатывает растровые изображения.

Судя по выводу вашего журнала, вы устанавливаете пиксель на 0x00ccdef2 (что совершенно прозрачно, если я не ошибаюсь). Когда вы получаете пиксель, вы получаете -16777216, который, если вы посмотрите на документацию по классу Color, является константой Color.BLACK. По сути, кажется, что Android не сохраняет прозрачность изображения. Поэтому, когда вы даете ему полностью прозрачный цвет, он просто воспринимает его как черный.

Здесь обсуждается похожая проблема здесь , а также старый отчет об ошибке здесь .

...