gpt4 book ai didi

java - Android的decodeByteArray在自己的线程上非常慢,但在UI线程上却不是

转载 作者:行者123 更新时间:2023-12-01 11:18:10 25 4
gpt4 key购买 nike

我实际上正在从事一个基于相机的项目。我正在队列中添加来自相机的 onPreviewFrame 预览帧,我将其返回到正在运行的线程中以在 SurfaceView 中处理和绘制它。 (我的目标是通过网络发送它)。

我的问题是 BitmapFactory.decodeByteArray() 函数在我的自定义线程上非常慢,但在 UI 线程 上工作得很好:

这很好用:

    private void drawFromThread(final byte[] data) {

size = mCamera.getPreviewSize();
YuvImage yuvimage;
yuvimage = new YuvImage(data, ImageFormat.NV21, size.width,size.height, null);
ByteArrayOutputStream baos;
baos = new ByteArrayOutputStream();
yuvimage.compressToJpeg(new Rect(0, 0, size.width, size.height), 10,baos);
final byte[] jdata = baos.toByteArray();
((Activity)context).runOnUiThread(new Runnable(){
@Override
public void run() {
Bitmap bmp;
bmp = BitmapFactory.decodeByteArray(jdata, 0, jdata.length);
Canvas canvas = contactView.getHolder().lockCanvas();
canvas.drawBitmap(bmp, 0, 0, null);
contactView.getHolder().unlockCanvasAndPost(canvas);
}
});
}

但这真的很慢:

    private void drawFromThread(final byte[] data) {

size = mCamera.getPreviewSize();
YuvImage yuvimage;
yuvimage = new YuvImage(data, ImageFormat.NV21, size.width,
size.height, null);
ByteArrayOutputStream baos;
baos = new ByteArrayOutputStream();
yuvimage.compressToJpeg(new Rect(0, 0, size.width, size.height), 10,
baos);
final byte[] jdata = baos.toByteArray();
Bitmap bmp;
bmp = BitmapFactory.decodeByteArray(jdata, 0, jdata.length);
Canvas canvas = contactView.getHolder().lockCanvas();
canvas.drawBitmap(bmp, 0, 0, null);
contactView.getHolder().unlockCanvasAndPost(canvas);
}

我用谷歌搜索了很多,但没有找到有同样问题的人。

我知道有最有效的方法来使用相机和 SurfaceView,我有另一个 SurfaceView 用于以“标准方式”显示我的相机帧。但我正在尝试模拟从网络获取的帧并将其绘制在 SurfaceView 上。

感谢您的宝贵时间。

最佳答案

我找到了问题的根源。我正在将我的相机预览帧从 Ui 线程推送到队列中。我从另一个线程的队列中检索的帧。问题在于,Ui 线程每秒向队列中推送的帧数超过了其他线程每秒可以处理的帧数。在 Ui 线程上执行decodeByteArray 会减慢速度,这可以让其他线程有时间绘制我的位图。我改变了我正在使用的队列类型以使其更快,并且仍然尝试找到一种在我的线程中更快渲染的方法。如果有人有建议,我会采纳。

关于java - Android的decodeByteArray在自己的线程上非常慢,但在UI线程上却不是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31545438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com