Фильтровать изображения на андроид? - PullRequest
0 голосов
/ 05 марта 2012

Я использую этот алгоритм для фильтрации изображений в andriod.

http://xjaphx.wordpress.com/2011/06/22/image-processing-convolution-matrix/

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

привет

Ответы [ 2 ]

2 голосов
/ 21 апреля 2012

Я недавно разместил там более быструю версию кода, который вы пробовали, вам следует попробовать.

Кстати, что вы имеете в виду под предложением изображения не соответствуют ожиданиям ?Может быть, вы просто используете неправильную матрицу;Вы можете найти пример матрицы здесь .

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

class Convolution {

    private static Bitmap convolute(Bitmap bmp, Matrix mat, float factor, int offset) {
    /* ... */
    }

    private static Matrix getEdgeEnhanceMatrix() {
        Matrix m = new Matrix();
        m.setValues(new float[] {
                0, 0, 0,
                -1, 1, 0,
                0, 0, 0
        });
        return m;
    }

    // the simple way
    public static Bitmap edgeEnhance1(Bitmap bmp) {
        return convolute(bmp, getEdgeEnhanceMatrix(), 1f, 0);
    }

    // if you want to apply filter to border pixels
    // warning: really memory consuming
    public static Bitmap edgeEnhance2(Bitmap bmp, int bgColor) {
        // create a bigger canvas
        Bitmap bigger = Bitmap.createBitmap(bmp.getWidth() + 2, bmp.getHeight() + 2, bmp.getConfig());
        Canvas cBigger = new Canvas(bigger);
        // paint background
        cBigger.drawColor(bgColor);
        // draw the bmp you want to manipulate from (1,1)
        cBigger.drawBitmap(bmp, 1, 1, null);
        // compute convolution
        bigger = convolute(bigger, getEdgeEnhanceMatrix(), 1f, 0);

        // create the result and project the convolution at (-1,-1)
        Bitmap rt = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig());
        Canvas cRt = new Canvas(rt);
        cRt.drawBitmap(bigger, -1, -1, null);

        return rt;
    }
}
0 голосов
/ 19 апреля 2012

Я использую эту формулу для фильтрации изображений согласно их расширению

class FileExtensionFilter implements FilenameFilter {
        public boolean accept(File dir, String name) {
            return (name.endsWith(".png") || name.endsWith(".PNG"));
        }

Если вы получаете его с SD-карты, дайте мне знать об этом. У меня был код для этого.

...