Bitmap.compress需要太多时间(~2秒)

时间:2017-08-22 06:52:36

标签: android bitmap android-bitmap bitmapimage bitmapfactory

位图压缩过程需要花费太多时间。我该如何解决这个问题?

在活动中:

icon= BitmapFactory.decodeResource(getResources(),R.mipmap.image);
在CallBackClass中

        synchronized (holder) {
            stream = new ByteArrayOutputStream();
            Log.d("LIFE_CYCLE", "settingImage 1=" + System.currentTimeMillis());
            icon.compress(Bitmap.CompressFormat.PNG, 100, stream);
            Log.d("LIFE_CYCLE", "settingImage 2=" + System.currentTimeMillis());
            byteArray = stream.toByteArray();
            b = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
            if(mWidth<mHeight){
                icon= Bitmap.createScaledBitmap(b, (int)(mWidth*0.75), (int)(mWidth*0.75), false);
            }
            else{
                icon= Bitmap.createScaledBitmap(b, (int)(mHeight*0.75), (int)(mHeight*0.75), false);
            }

            canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
            canvas.drawBitmap(icon, ((mWidth)-icon.getWidth())/2, (mHeight-icon.getHeight())/2, new Paint());
            draw_target(canvas);
        }

此行需要约2秒钟:

icon.compress(Bitmap.CompressFormat.PNG, 100, stream);

P.S。我的图像部分透明,所以我需要使用.PNG而不是.JPG

2 个答案:

答案 0 :(得分:1)

尝试使用 JPG 而不是 100%质量 PNG 进行压缩。它是如此快速地完成并且质量也更好。我也遇到了这个问题,并解决了这个问题。

icon.compress(Bitmap.CompressFormat.JPEG, 100, stream);

答案 1 :(得分:0)

尝试在异步任务中使用与位图相关的操作,因为最佳做法是对后台线程/异步任务执行大量操作。