开启图库:IMAGE_OPEN 请求码
- Intent intent = new Intent(Intent.ACTION_PICK,
- android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
- startActivityForResult(intent, IMAGE_OPEN);
获取图片路径:String pathImage ;
- //获取图片路径 响应startActivityForResult
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- //打开图片
- if(resultCode==RESULT_OK && requestCode==IMAGE_OPEN) {
- Uri uri = data.getData();
- if (!TextUtils.isEmpty(uri.getAuthority())) {
- //查询选择图片
- Cursor cursor = getContentResolver().query(
- uri,
- new String[] { MediaStore.Images.Media.DATA },
- null,
- null,
- null);
- //返回 没找到选择图片
- if (null == cursor) {
- return;
- }
- //光标移动至开头 获取图片路径
- cursor.moveToFirst();
- pathImage = cursor.getString(cursor
- .getColumnIndex(MediaStore.Images.Media.DATA));
- }
- } //end if 打开图片
- }
第二种 获取图片的bitmap
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 0:
if (resultCode == RESULT_OK) {
Uri uri = data.getData();
Log.e("uri", uri.toString());
ContentResolver cr = this.getContentResolver();
try {
BitmapFactory.Options bOptions = new BitmapFactory.Options();
BitmapFactory.decodeStream(cr.openInputStream(uri), null,
bOptions);
bOptions.inJustDecodeBounds = true;
int photow = bOptions.outWidth;
int photoH = bOptions.outHeight;
int wiht = getWindowManager().getDefaultDisplay().getWidth()/2;
int height = getWindowManager().getDefaultDisplay().getHeight()/2;
int scleFactory = Math.min(photow / wiht, photoH / height);
bOptions.inJustDecodeBounds = false;
bOptions.inSampleSize = scleFactory;
bitmap = BitmapFactory.decodeStream(
cr.openInputStream(uri), null, bOptions);
/* 将Bitmap设定到ImageView */
up_img.setImageBitmap(bitmap);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 0:
if (resultCode == RESULT_OK) {
Uri uri = data.getData();
Log.e("uri", uri.toString());
ContentResolver cr = this.getContentResolver();
try {
BitmapFactory.Options bOptions = new BitmapFactory.Options();
BitmapFactory.decodeStream(cr.openInputStream(uri), null,
bOptions);
bOptions.inJustDecodeBounds = true;
int photow = bOptions.outWidth;
int photoH = bOptions.outHeight;
int wiht = getWindowManager().getDefaultDisplay().getWidth()/2;
int height = getWindowManager().getDefaultDisplay().getHeight()/2;
int scleFactory = Math.min(photow / wiht, photoH / height);
bOptions.inJustDecodeBounds = false;
bOptions.inSampleSize = scleFactory;
bitmap = BitmapFactory.decodeStream(
cr.openInputStream(uri), null, bOptions);
/* 将Bitmap设定到ImageView */
up_img.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {
Log.e("Exception", e.getMessage(), e);
}
}
break;
}
}
第一种方法获取的路径可以保持下来,然后再显示原图(如果路径失效将无法显示)
第二种情况是使用处理了bitmap(可以用于显示和上传,有时候不需要太清晰的图片,就直接压缩掉上传,以节省用户流量)
实际中可能用到的权限 :MOUNT_UNMOUNT_FILESYSTEMS可以在sd卡中创建文件
WRITE_EXTERNAL_STORAGE 写入权限
READ_EXTERNAL_STORAGE 读取权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
相关链接 : 图片处理
http://blog.csdn.net/jdsjlzx/article/details/44160603
bitmap写入本地
dscfile.createNewFile();
OutputStream img_fos = new FileOutputStream(dscfile);
bitmap.compress(Bitmap.CompressFormat.PNG, 100,
img_fos);
img_fos.flush();
img_fos.close();
OutputStream img_fos = new FileOutputStream(dscfile);
bitmap.compress(Bitmap.CompressFormat.PNG, 100,
img_fos);
img_fos.flush();
img_fos.close();