天天看点

public static Bitmap getMutableBitmap(Bitmap bitmap)

public static Bitmap getMutableBitmap(Bitmap bitmap)
  {
   if(bitmap == null || bitmap.isMutable())
   {
    return bitmap;
   }
   
   try {
    File file = new File(AppConstants.SDCARD_PATH+"/mutable.txt");
    file.getParentFile().mkdirs();
    
    RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
    
    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    
    FileChannel channel = randomAccessFile.getChannel();
    MappedByteBuffer map = channel.map(MapMode.READ_WRITE, 0, width*height*4);
    bitmap.copyPixelsToBuffer(map);
    bitmap.recycle();
    
    bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
    map.position(0);
    bitmap.copyPixelsFromBuffer(map);   channel.close();
    randomAccessFile.close();
    
   } catch (Exception e) {
    
    return bitmap.copy(Bitmap.Config.ARGB_8888, true);
   } 
   
   return bitmap;
  }