画像のoomについて

1810 ワード

画像のoomについて
oom(out of memory)は、その名の通りメモリオーバーフローで、一般的に大きな画像をロードするときに遭遇しますが、最近cameraを作ると、oomの問題も発生します.ここでは比較的良い圧縮方法をお勧めします.
 public static  Bitmap revitionImageSize(Bitmap image)throws IOException
	   {
		   ByteArrayOutputStream baos = new ByteArrayOutputStream();         
		   image.compress(Bitmap.CompressFormat.JPEG, 100, baos);  
			 ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());  
			 BitmapFactory.Options newOpts = new BitmapFactory.Options(); 
                         //    true,  bitmap      ,           (      )
			 newOpts.inJustDecodeBounds = true;  
			 BitmapFactory.decodeStream(isBm, null, newOpts);  
			 isBm.close();
			   int i = 1;  
		        Bitmap bitmap = null;  
		        while (true) {  
		            //             ,           
		        	int w =newOpts.outWidth;
		        	int h = newOpts.outHeight;
		            if ((newOpts.outWidth >> i <= image.getWidth())  
		                    && (newOpts.outHeight >> i <= image.getHeight())) {  
		                //      ,  :         ,          !   
		            	isBm = new ByteArrayInputStream(baos.toByteArray()); 
		                //                        。   
		                int x =(int) Math.pow(2.0D, i);
		                newOpts.inSampleSize = (int) Math.pow(2.0D, i);
		                //         true,     false,            
		                newOpts.inJustDecodeBounds = false;  
		                bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);  
		                break;  
		            }  
		            i += 1;  
		        }  
		        return bitmap;
	   }
私はここで1倍圧縮して、具体的にどのくらい圧縮して、自分で設定することができて、inSampleSizeはあなたが最後に倍数を圧縮する値です.プロジェクトで使ったので、ここに記録しておきます!