Все,повышения скорости GetPixel() и SetPixel() на Android Bitmap
После того как я заметил, как медленно 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-кратный объем памяти, а также ваш setpixel не работает. Этот массив является только копией матрицы изображения внутри фактического растрового изображения. Поэтому, изменяя значения в нем, они не сохраняются до тех пор, пока вы не вернете этот буфер обратно в объект растрового изображения. –
Я понимаю его в два раза больше памяти (стоит скорость в моем использовании), но я потерял ваш комментарий, что setpixel не работает - он работает, если я обращаюсь к растровому изображению с помощью метода getBitmap, и это то, что я хотел. – Piotr