улучшение скорости getpixel () и setpixel () на растровом Android - PullRequest
7 голосов
/ 17 января 2011

Все,

После того, как я заметил, насколько медленными являются getPixel и setPixel (не уверен, какой из них, думаю, оба не с турбонаддувом), я быстро кодировал контейнер для Bitmap, который использует int[]массив для обработки растровых операций.

Уже - заметно быстрее, но этого недостаточно.Не могли бы вы посоветовать, как ускорить процесс?

Моя идея состоит в том, чтобы отслеживать, что делается "грязным" функциями setPixel, и обновлять только эту часть Bitmap при вызове getBitmap() ... неясно, как установитьsetPixels параметры, хотя (что-то со смещением и шагом, я думаю).

Кроме того, есть ли более быстрый рецепт?

Заранее всем спасибо за помощь!

import android.graphics.Bitmap;

public class DrawableBitmapContainer {
private Bitmap image;
private int width, height;
private int[]  pixels;
public DrawableBitmapContainer(Bitmap _source ){
    image = _source;
    width = image.getWidth();
    height = image.getHeight();
    pixels = new int[width*height];
    image.getPixels(pixels,0,width,0,0,width,height);
}
public int getPixel(int x,int y){
    return pixels[x+y*width];
}
public void setPixel(int x,int y, int color){
    pixels[x+y*width]=color;
}
public Bitmap getBimap(){
    image.setPixels(pixels,0,width,0,0,width,height);
    return image;
}
public int getWidth(){
    return image.getWidth();
}
public int getHeight(){
    return image.getHeight();
}
}

Ответы [ 2 ]

4 голосов
/ 17 января 2011

Для таких простых функций, как setPixel / getPixel, затраты на вызов функции относительно велики.

Было бы намного быстрее получить доступ к массиву pixels напрямую, а не через эти функции. Конечно, это означает, что вы должны сделать pixels публичным, что не очень приятно с точки зрения дизайна, но если вам абсолютно необходима вся производительность, которую вы можете получить, это путь.

См. Также Проектирование производительности в документации для Android.

Если этого все еще недостаточно, рассмотрите возможность кодирования ваших растровых операций в C ++ с использованием NDK .

0 голосов
/ 25 июля 2013

другой альтернативой является использование Android ndk.когда дело доходит до того, что у вас очень мало помощи, но это действительно увеличивает скорость

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