Эффект обработки изображения отнимает много времени - PullRequest
0 голосов
/ 30 ноября 2011

Я применяю эффект сепии к изображению, но когда я нажимаю на кнопку, чтобы применить его готово, но через 90 секунд

public static Bitmap effect(Bitmap src, int depth, double red, double green, double blue) 
{

        int width = src.getWidth();
        int height = src.getHeight();
        Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig());
        final double GS_RED = 0.3;
        final double GS_GREEN = 0.59;
        final double GS_BLUE = 0.11;

        int A, R, G, B;
        int pixel;


        for(int x = 0; x < width; ++x) {
            for(int y = 0; y < height; ++y) {

                pixel = src.getPixel(x, y);

                A = Color.alpha(pixel);             
                R = Color.red(pixel);
                G = Color.green(pixel);
                B = Color.blue(pixel);

                B = G = R = (int)(GS_RED * R + GS_GREEN * G + GS_BLUE * B);

                R += (depth * red);
                if(R > 255) { R = 255; }

                G += (depth * green);
                if(G > 255) { G = 255; }

                B += (depth * blue);
                if(B > 255) { B = 255; }
                bmOut.setPixel(x, y, Color.argb(A, R, G, B));
                   }}

    return bmOut;
}

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

О, похоже, вы используете пример кода в моем блоге: http://xjaphx.wordpress.com/2011/06/21/image-processing-photography-sepia-toning-effect/ Эта статья предназначена для демонстрации того, как реализовать алгоритм, поэтому в ней, безусловно, не упоминается больше ничего.

Что касается проблемы с производительностью, я предлагаю:

  1. Если вы разрабатываете на уровне приложения (код Java ..), используйте getPixels() setPixels() и манипулируйте двумерным массивом.Ну, в этом сепии, это может быть до 5-10 секунд на эмуляторе, на реальном устройстве это может быть 3 секунды.

  2. Желательно делать все вещи обработки изображенийв NDK (например, при создании библиотеки обработки изображений ...) она будет обрабатываться намного быстрее.

В любом случае, получайте удовольствие!

0 голосов
/ 30 ноября 2011

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

Это не решает вашу проблему, но также не анализирует и не манипулирует каждым цветом пикселей, ваша единственная проблема - сохранение полученного изображения, однако это делается аналогичным образом

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