android画像圧縮

2316 ワード

//       
		   BitmapFactory.Options options = new BitmapFactory.Options();
		   options.inJustDecodeBounds = true;
		   
		   //          
		   Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/dcim/Camera/hello.jpg",options);//    bm  
		   options.inJustDecodeBounds =false;
		   //     
		   int be = (int)(options.outHeight / (float)200);
		   if(be <= 0)
			    be =1;
		   options.inSampleSize =be;
		   //      ,      options.inJustDecodeBounds  false 
		   bitmap = BitmapFactory.decodeFile("/sdcard/dcim/Camera/hello.jpg",options);
		   int w = bitmap.getWidth();
		   int h=bitmap.getHeight();
		   System.out.println(w+" "+h);
		   myImageView.setImageBitmap(bitmap);
		   
		   
		   //   sdCard
		   File file2= new File("/sdcard/dcim/Camera/test.jpg");
		   try {
			FileOutputStream out = new FileOutputStream(file2);
			if(bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out)){
				out.flush();
				out.close();
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		   
		   
		//  sd 
		   File file =new File("/sdcard/dcim/Camera/test.jpg");
		   int maxBufferSize = 16 * 1024;
			
			int len = 0;
			ByteArrayOutputStream outStream = new ByteArrayOutputStream();
			 BufferedInputStream bufferedInputStream;
			try {
				bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
				int bytesAvailable = bufferedInputStream.available();
				int bufferSize = Math.min(bytesAvailable, maxBufferSize);
				byte[] buffer = new byte[bufferSize];
				while ((len = bufferedInputStream.read(buffer)) != -1)
				{
					outStream.write(buffer, 0, bufferSize);
				}
				 data = outStream.toByteArray();
				outStream.close();
				bufferedInputStream.close();
				
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
最近プロジェクトをして、1つの問題にぶつかって、1つの大きいファイルをアップロードして、メモリがあふれて、私は画像を圧縮してアップロードするしかありません. 
これにより、メモリがオーバーフローすることなく、大きな画像を読み取ることができます.