找回密码
 立即注册

Android ImageConverter 多次调用之后内存溢出的问题

Android多张照片提取人脸特征,addface之前需要转成CP_PAF_NV21格式,官方给出的方式如下
  1. byte[] data = new byte[mBitmap.getWidth() * mBitmap.getHeight() * 3 / 2];
  2. ImageConverter convert = new ImageConverter();
  3. convert.initial(mBitmap.getWidth(), mBitmap.getHeight(), ImageConverter.CP_PAF_NV21);
  4. if (convert.convert(mBitmap, data)) {
  5.     Log.e(TAG, "convert ok!");
  6. }
  7. convert.destroy();
复制代码
但是大概执行9-10次之后,convert.destroy();就会出现内存溢出,程序退出。
  1. A/libc: invalid address or address of corrupt block 0xb97537e0 passed to dlfree
  2. A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0xdeadbaad in tid 24810 (Thread-483)
复制代码
请问这是什么问题呢?
回复

使用道具 举报

大神点评7

ZhouYonghua 2018-7-4 15:03:05 显示全部楼层
我也遇到了这个问题,怎么解决呢?
回复

使用道具 举报

GuoWen 2018-7-6 13:26:57 显示全部楼层
我也遇到这个问题了。我再华为平板上(Android7.0)上不会崩溃,连续注册了一千张人脸,但是在android5.0的3288机器上测试,如果每次间隔时间在1s的话,注册30次左右崩溃,不间隔连续注册的话两三次就会崩溃。请问有解决方法没呢。
回复

使用道具 举报

建伟hybird 2018-7-7 11:18:06 显示全部楼层
也有这问题 搞得好烦
回复

使用道具 举报

hidafa 2018-7-8 22:44:51 显示全部楼层
me too,楼主,解决了吗?
回复

使用道具 举报

本帖最后由 所谓努力为笑话 于 2018-7-14 10:58 编辑

使用该类(ImageConverter)的时候报couldn't find "libimage.so",请问各位如何解决的(已解决)
回复

使用道具 举报

本帖最后由 省油的灯 于 2018-7-18 22:15 编辑
  1.     public static byte[] getNV21(int inputWidth, int inputHeight, Bitmap scaled)
  2.     {

  3.         int[] argb = new int[inputWidth * inputHeight];

  4.         scaled.getPixels(argb, 0, inputWidth, 0, 0, inputWidth, inputHeight);
  5.         byte[] yuv = new byte[inputWidth * inputHeight * 3 / 2];

  6.         encodeYUV420SP(yuv, argb, inputWidth, inputHeight);

  7.         return yuv;
  8.     }
复制代码

  1.    private static void encodeYUV420SP(byte[] yuv420sp, int[] argb, int width, int height)
  2.     {
  3.         int frameSize = width * height;

  4.         int yIndex = 0;
  5.         int uvIndex = frameSize;

  6.         int R, G, B, Y, U, V;
  7.         int index = 0;

  8.         for (int j = 0; j < height; j++)
  9.         {
  10.             for (int i = 0; i < width; i++)
  11.             {
  12.                 R = (argb[index] & 0xff0000) >> 16;
  13.                 G = (argb[index] & 0xff00) >> 8;
  14.                 B = (argb[index] & 0xff);

  15.                 // well known RGB to YUV algorithm
  16.                 Y = ((66 * R + 129 * G + 25 * B + 128) >> 8) + 16;
  17.                 U = ((-38 * R - 74 * G + 112 * B + 128) >> 8) + 128;
  18.                 V = ((112 * R - 94 * G - 18 * B + 128) >> 8) + 128;

  19.                 yuv420sp[yIndex++] = (byte)((Y < 0) ? 0 : ((Y > 255) ? 255 : Y));
  20.                
  21.                 if (j % 2 == 0 && index % 2 == 0 &&uvIndex<yuv420sp.length-2)
  22.                 {
  23.                     yuv420sp[uvIndex++] = (byte)((V < 0) ? 0 : ((V > 255) ? 255 : V));
  24.                     yuv420sp[uvIndex++] = (byte)((U < 0) ? 0 : ((U > 255) ? 255 : U));
  25.                 }
  26.                 index++;
  27.             }
  28.         }
  29.     }
复制代码
回复

使用道具 举报


也是网上找的解决方案,但是测过可行
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

0关注

0粉丝

3帖子

最热主题