Code example for BitmapFactory.Options

Methods: decodeByteArray

0
	 * @param 如果需要观察输入流的读取进度,可传入该参数 
	 * @return 
	 */ 
	public static Bitmap decode(InputStream in,int decodeWidth,int decodeHeight,boolean inNativeAlloc,Observer observer){
		byte[] bytes = IOUtils.inputStream2ByteArray(in,observer);
		BitmapFactory.Options newOpts = new BitmapFactory.Options();
		//开始读入图片,此时把options.inJustDecodeBounds 设回true了 
		newOpts.inJustDecodeBounds = true;
		BitmapFactory.decodeByteArray(bytes, 0, bytes.length, newOpts);
		fillDefaultBitmapOptions(newOpts,decodeWidth,decodeHeight,null,inNativeAlloc);
		Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, newOpts);
		return bitmap;
	} 
 
	@TargetApi(Build.VERSION_CODES.HONEYCOMB)
	public static void fillDefaultBitmapOptions(Options options,
			int decodeWidth,int decodeHeight,Bitmap inBitmap,boolean inNativeAlloc){
		options.inJustDecodeBounds = false;
		options.inPreferredConfig = Config.ARGB_8888;
		//设置inPurgeable这个值可以让系统在回收内存的时候把图片 pixels 占用的内存(在c中分配的)回收掉。被回收的图片如果需要再次显示的话,系统会重新解码、载入。因为需要重新编码,因此需要保存原始的编码数据来支持。 
		//inInputShareable这个参数就是设置输入的原始编码数据是否可共享,如果设置为true,那就会保持编码数据的引用,如果为false就需要进行深度拷贝。