如何有效地获取和设置位图像素



我目前正在制作一个应用程序,涉及改变位图中像素的RGB值,并在之后创建一个新的位图

我的问题是我需要帮助提高这个过程的速度。(用inSampleSize = 2处理位图可能需要几分钟,永远处理inSampleSize = 1)现在,我使用getPixelsetPixel方法来改变像素,并相信这两种方法是问题的根源,因为它们非常低效。getPixels方法不适合,因为我没有按顺序改变每个像素(例如,获得一个像素并将其周围的5像素半径更改为相同的颜色),除非有人知道使用getPixels的方法(也许能够将像素放在2D数组中)。

这是我代码的一部分:

public static final alteredBitmp(Bitmap bp)
{

 //initialize variables
 // ..................

  Bitmap bitmap = Bitmap.createBitmap(width, height,
            Bitmap.Config.ARGB_8888);
    for (int x = 0; x < width; x++) {
        int left = Math.max(0, x - RADIUS);
        int right = Math.min(x + RADIUS, width - 1);
        for (int y = 0; y < height; ++y) {
            int top = Math.max(0, y - RADIUS);
            int bottom = Math.min(y + RADIUS, height - 1);
            int maxIndex = -1;
            for (int j = top; j <= bottom; j++) {
                for (int i = left; i <= right; i++) {
                    pixelColor = bitmap.getPixel(i, j);
                    //get rgb values
                    //make changes to those values
                }
            }
        }
     }
     //set new rgb values

     bitmap.setPixel(x, y, Color.rgb(r, g, b));
     //return new bitmap

提前感谢!

考虑一下RenderScript,这是Android的高性能计算框架。当你迭代宽度x高度的像素数,并改变每一个在现代设备中可能是大约一百万像素或更高,在一个线程中做它可能需要几分钟。在可能的情况下,RenderScript可以在CPU或GPU上并行化操作。

http://android-developers.blogspot.com/2012/01/levels-in-renderscript.html

http://developer.android.com/guide/topics/renderscript/index.html

Google IO 2013:https://youtu.be/uzBw6AWCBpU

RenderScript兼容库:http://android-developers.blogspot.com/2013/09/renderscript-in-android-support-library.html

相关内容

  • 没有找到相关文章

最新更新