加载大图片到内存
多媒体:很多信息的展现方式
文件 图片 声音 视屏
默认情况下 每个android程序 dailvik 虚拟机 最大堆空间大小 16M
所以,如果我们要加载的图片很大的情况下,内存是不允许的,因此我们必须要将图片进行适当的缩放。
xml文件:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="load"
android:text="加载图片到内存"/>
<ImageView
android:id="@+id/iv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
MainActivity文件:
private ImageView iv;
private int windowheight;
private int windowwidth;
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.iv);
//得到手机屏幕的高度
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
windowheight = wm.getDefaultDisplay().getHeight();
windowwidth = wm.getDefaultDisplay().getWidth();
//一下代码是新的API不过2.3系统不存在
/**Point outSize = new Point();
*wm.getDefaultDisplay.getSize(outSize);
*outSize.x;
*outSize.y;
*/
}
public void load(View view){
//图片解析的配置
BitmapFactory.Options opts = new Options();
//不去真的解析图片 只是获取图片的头部信息宽高
opts.inJustDecodeBounds =true;
BitmapFactory.decodeFile("/sdcard/a.jpg", opts);
int imageHeight = opts.outHeight;
int imageWidth = opts.outWidth;
System.out.println("图片宽度:"+ imageWidth);
System.out.println("图片的高度:"+ imageHeight);
//计算缩放比例
int scaleX = imageWidth/windowwidth;
int scaleY = imageHeight/windowheight;
int scale = 1;
if(scaleX > scaleY & scaleY >=1){
scale = scaleX;
}
if(scaleY > scaleX & scaleX >=1){
scale = scaleY;
}
//解析图片
opts.inJustDecodeBounds =false;
//采样率
opts.inSampleSize = scale;
Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/a.jpg", opts);
iv.setImageBitmap(bitmap);
}
获取图片exif信息:
public void read(View view){
try{
ExifInterface exif = new ExifInterface("/sdcard/a.jpg");
String time = exif.getAttribute(ExifInterface.TAG_DATETIME);
System.out.println(time);
String model = exif.getAttribute(ExifInterface.TAG_MODEL);
System.out.println("model:"+ model);
//也可通过exif.setAttribute(String tag, String value)方法设置相应的属性
}catch(IOException e){
e.printStackTrace();
}
}