记一次系统的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;
}  

观察了几天,并不会出现

相关推荐
鸿蒙布道师2 小时前
鸿蒙NEXT开发动画案例5
android·ios·华为·harmonyos·鸿蒙系统·arkui·huawei
橙子199110167 小时前
在 Kotlin 中什么是委托属性,简要说说其使用场景和原理
android·开发语言·kotlin
androidwork7 小时前
Kotlin Android LeakCanary内存泄漏检测实战
android·开发语言·kotlin
笨鸭先游8 小时前
Android Studio的jks文件
android·ide·android studio
gys98958 小时前
android studio开发aar插件,并用uniapp开发APP使用这个aar
android·uni-app·android studio
H309198 小时前
vue3+dhtmlx-gantt实现甘特图展示
android·javascript·甘特图
像风一样自由8 小时前
【001】renPy android端启动流程分析
android·gitee
千里马学框架10 小时前
重学安卓14/15自由窗口freeform企业实战bug-学员作业
android·framework·bug·systrace·安卓framework开发·安卓窗口系统·自由窗口
xianrenli3816 小时前
android特许权限调试
android
*拯18 小时前
Uniapp Android/IOS 获取手机通讯录
android·ios·uni-app