Размытие изображения в Android - PullRequest
3 голосов
/ 25 ноября 2010

Я использую следующий код для размытия изображения в Android, но он не работает.Окончательное изображение, которое я получаю, имеет очень искаженный цвет, а не размытое изображение, которое я хочуЧто я делаю не так?

public Bitmap blurBitmap(Bitmap bmpOriginal)
{        
    int width, height;
    height = bmpOriginal.getHeight();
    width = bmpOriginal.getWidth();    

    Bitmap bmpBlurred = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
    for (int i = 1; i < width - 1; i++) {
        for (int j = 1; j < height - 1; j++) {
            int color = (int) getAverageOfPixel(bmpOriginal, i, j);
            bmpBlurred.setPixel(i, j, Color.argb(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color)));
        }
    }
    return bmpBlurred;
}

private double getAverageOfPixel(Bitmap bitmap, int i, int j) {
     return (
    bitmap.getPixel(i-1, j-1) + bitmap.getPixel(i-1, j) + bitmap.getPixel(i-1, j+1) +
    bitmap.getPixel(i, j-1) + bitmap.getPixel(i, j) + bitmap.getPixel(i, j+1) + 
    bitmap.getPixel(i+1, j-1) + bitmap.getPixel(i+1, j) + bitmap.getPixel(i+1, j+1)) / 9;
}   

1 Ответ

2 голосов
/ 25 ноября 2010

Ваша проблема в том, что вы объединяете все цветовые каналы одновременно, и все они перетекают друг в друга.Вы должны применить свою функцию размытия для красного, зеленого и синего каналов отдельно.

Может быть проще создать SurfaceView и использовать флаг FX_SURFACE_BLUR?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...