0

我正在使用 Textureview.getBitmap() 从相机预览中每秒抓取帧。它工作得很好,只是它会导致主 UI 线程缓慢,有时甚至崩溃。请问我需要做什么??谢谢

这是我的代码:

       mCountDownTimer=new CountDownTimer(7000,500) {

            @Override
            public void onTick(long millisUntilFinished) {
                Log.v("Log_tag", "Tick of Progress"+ i+ millisUntilFinished);
                i++;
                mProgressBar.setProgress(i);
               Bitmap bmps = mTextureView.getBitmap();
               ByteArrayOutputStream out = new ByteArrayOutputStream();
               bmps.compress(Bitmap.CompressFormat.JPEG , 0, out);
               rev.add(bmps);
            }

            @Override
            public void onFinish() {
            //Do what you want 
                i++;
                mProgressBar.setProgress(i);
                mCountDownTimer.cancel();

            }
        };
4

1 回答 1

1

bmps.compress 方法将其结果写入您的输出 ByteArrayOutputStream,它不会更改原始位图。因此,首先,您没有使用 compress 方法的结果,因为在 bmps.compress 调用之后您没有使用“out”变量。

我认为删除这两行:

ByteArrayOutputStream out = new ByteArrayOutputStream(); bmps.compress(Bitmap.CompressFormat.JPEG, 0, out);

会产生与您现在相同的结果。

但除此之外,最好不要在 UI 线程上进行处理(如图像处理),这肯定会降低应用程序的速度。解决这个问题的最简单方法是使用 AsyncTask:

http://developer.android.com/reference/android/os/AsyncTask.html

AsyncTask Android 示例

尝试在 AsyncTask 的 doInBackground 方法中压缩位图,您的问题将得到解决。

于 2014-08-29T22:36:11.297 回答