记一次系统的bug,yuvImage.compressToJpeg导致内存泄露

在做人脸识别的时候,发现内存一直增加,但是该释放的资源已经释放,经过跟厂家一起排查,是在compressToJpeg转换的时候导致的

复制代码
原代码::YuvImage yuvImage = new YuvImage(data, ImageFormat.NV21, size.width, size.height, null);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
yuvImage.compressToJpeg(new Rect(0, 0, size.width, size.height), 100, baos);
byte[] byteArray = baos.toByteArray();

后改成直接转成bitmap。

复制代码
Bitmap yuv2Bitmap = BitmapUtils.yuv2Bitmap(data, size.width, size.height);
复制代码
public static Bitmap yuv2Bitmap(byte[] data, int width, int height) {
    int frameSize = width * height;
    int[] rgba = new int[frameSize];

    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {
            int y = (0xff & ((int) data[i * width + j]));
            int u = (0xff & ((int) data[frameSize + (i >> 1) * width + (j & ~1) + 0]));
            int v = (0xff & ((int) data[frameSize + (i >> 1) * width + (j & ~1) + 1]));
            y = y < 16 ? 16 : y;

            int r = Math.round(1.164f * (y - 16) + 1.596f * (v - 128));
            int g = Math.round(1.164f * (y - 16) - 0.813f * (v - 128) - 0.391f * (u - 128));
            int b = Math.round(1.164f * (y - 16) + 2.018f * (u - 128));

            r = r < 0 ? 0 : (r > 255 ? 255 : r);
            g = g < 0 ? 0 : (g > 255 ? 255 : g);
            b = b < 0 ? 0 : (b > 255 ? 255 : b);

            rgba[i * width + j] = 0xff000000 + (b << 16) + (g << 8) + r;
        }
    }

    Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    bmp.setPixels(rgba, 0, width, 0, 0, width, height);
    return bmp;
}  

观察了几天,并不会出现

相关推荐
TriplesGoldWater2 小时前
MySQL期末答辩—仓库管理系统
android·数据库·mysql
kingsley12125 小时前
SeekBar设置自定义thumb图片的时候显示不全问题
android
被一米六支配的恐惧5 小时前
golang解析配置文件
android·开发语言·golang
vx_bscxy3226 小时前
SSM+汽车停车位共享APP-计算机毕业设计源码041534
android·java·数据库·node.js·汽车·php·课程设计
JoyceMill7 小时前
Android中的警报对话框:功能与实现
android·microsoft
Rjdeng7 小时前
深入分析 Android BroadcastReceiver (九)
android·broadcast·receiver
xiangxiongfly9158 小时前
Android 性能优化之启动优化
android·性能优化·启动优化
夜色呦11 小时前
深入 Laravel 的错误处理与异常处理机制
android·php·laravel
JoyceMill13 小时前
Android动画:提升用户体验的关键技术
android·ux
s_nshine13 小时前
将 build.gradle 配置从 Groovy 迁移到 Kotlin
android·开发语言·kotlin·gradle·groovy·build