在Android中按像素更改图像的最快方法?

时间:2017-08-23 04:56:29

标签: java android bitmap pixel

我正在研究应用程序的一项功能,该功能允许用户在图像上拖动颜色选择器,然后替换相应设计中的像素。我有它在Android模拟器上工作,但在实际设备上很慢。拖动选择器时,颜色更新需要很长时间,这会使选择器在屏幕上跳跃而不是平滑拖动,颜色会逐渐变化。

balls.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(balls.getLayoutParams());
            switch(event.getAction())
            {
                case MotionEvent.ACTION_DOWN:
                    break;
                case MotionEvent.ACTION_MOVE:

                    numtimes=numtimes+1;
                    int x_cord = (int)event.getRawX();
                    int y_cord = (int)event.getRawY();
                    ImageView ColorImage = (ImageView) findViewById(300);
                    Bitmap bitmap = ((BitmapDrawable)ColorImage.getDrawable()).getBitmap();
                    int pixel = bitmap.getPixel(XIT,YIT);
                    UpdateColor(pixel);
                    break;
                default:
                    break;
            }
            return true;
        }
    });



protected void UpdateColorOne(int pixel) {



    // Update Custom Ball
    ImageView balls = (ImageView) findViewById(27);
    GradientDrawable shapeNX = new GradientDrawable();
    shapeNX.setColor(pixel);
    balls.setBackground(shapeNX);

    //Update Image
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inMutable = true;
    Bitmap myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pimage, options);
    int[] pixels = new int[myBitmap.getHeight() * myBitmap.getWidth()];

    myBitmap.getPixels(pixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getWidth(), myBitmap.getHeight());

    /BeginEdit
    for (int i = 0; i < myBitmap.getWidth() * myBitmap.getHeight(); i++) {
        int p = pixels[i];
        int R = (p >> 16) & 0xff;
        int G = (p >> 8) & 0xff;
        int B = p & 0xff;
        if (R > 200 && G < 200) {
            pixels[i] = pixel;
        }
    }


    myBitmap.setPixels(pixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getWidth(), myBitmap.getHeight());
    Drawable DD = new BitmapDrawable(getResources(), myBitmap);
    ImageView imgArrow = (ImageView) findViewById(1000);
    imgArrow.setImageDrawable(DD);
}

几点说明: - 只更新自定义球/选择器时速度很好。 - 我不认为预设图像的大小是一个主要因素。我已经尝试评论for循环(下面标记为&#34; Begin Edit&#34;)并且它仍然很慢。 getPixels / setPixels和其他位图的东西似乎是慢点。

我还没有找到另一种方法来达到这个效果!需要使用像素数据来完成,因为更改很复杂。我在iPhone上工作正常 - 当然必须有一种方法可以在Android上有效地进行操作吗?

0 个答案:

没有答案