1
2
|
Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(openCameraIntent, TAKE_PICTURE); |
1
|
Uri imageUri = Uri.fromFile( new File(Environment.getExternalStorageDirectory(), "image.jpg" )); |
1
|
openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); |
1
2
3
4
5
6
7
8
9
10
11
|
/**拍照获取相片**/ private void doTakePhoto() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //调用系统相机 Uri imageUri = Uri.fromFile( new File(Environment.getExternalStorageDirectory(), "image.jpg" )); //指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换 intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); //直接使用,没有缩小 startActivityForResult(intent, PHOTO_WITH_CAMERA); //用户点击了从相机获取 } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
@Override protected void onActivityResult( int requestCode, int resultCode, Intent data) { super .onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { switch (requestCode) { case TAKE_PICTURE: //将保存在本地的图片取出并缩小后显示在界面上 Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+ "/image.jpg" ); Bitmap newBitmap = zoomBitmap(bitmap, bitmap.getWidth() / SCALE, bitmap.getHeight() / SCALE); //由于Bitmap内存占用较大,这里需要回收内存,否则会报out of memory异常 bitmap.recycle(); //将处理过的图片显示在界面上,并保存到本地 iv_image.setImageBitmap(newBitmap); savePhotoToSDCard(newBitmap, Environment.getExternalStorageDirectory().getAbsolutePath(), String .valueOf(System.currentTimeMillis())); break ; default : break ; } } } |
1
2
3
|
Intent openAlbumIntent = new Intent(Intent.ACTION_GET_CONTENT); openAlbumIntent.setType( "image/*" ); startActivityForResult(openAlbumIntent, CHOOSE_PICTURE); |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
@Override protected void onActivityResult( int requestCode, int resultCode, Intent data) { super .onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { switch (requestCode) { case CHOOSE_PICTURE: ContentResolver resolver = getContentResolver(); //照片的原始资源地址 Uri originalUri = data.getData(); try { //使用ContentProvider通过URI获取原始图片 Bitmap photo = MediaStore.Images.Media.getBitmap(resolver, originalUri); if (photo != null ) { //为防止原始图片过大导致内存溢出,这里先缩小原图显示,然后释放原始Bitmap占用的内存 Bitmap smallBitmap = zoomBitmap(photo, photo.getWidth() / SCALE, photo.getHeight() / SCALE); //释放原始图片占用的内存,防止out of memory异常发生 photo.recycle(); iv_image.setImageBitmap(smallBitmap); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } break ; default : break ; } } } |
1
2
3
4
5
6
7
8
9
10
11
|
/** 缩放Bitmap图片 **/ public Bitmap zoomBitmap(Bitmap bitmap, int width, int height) { int w = bitmap.getWidth(); int h = bitmap.getHeight(); Matrix matrix = new Matrix(); float scaleWidth = ((float) width / w); float scaleHeight = ((float) height / h); matrix.postScale(scaleWidth, scaleHeight); // 利用矩阵进行缩放不会造成内存溢出 Bitmap newbmp = Bitmap.createBitmap(bitmap, 0 , 0 , w, h, matrix, true ); return newbmp; } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/**从相册获取图片**/ private Intent doPickPhotoFromGallery() { Intent intent = new Intent(); intent.setType( "image/*" ); // 开启Pictures画面Type设定为image intent.setAction(Intent.ACTION_GET_CONTENT); //使用Intent.ACTION_GET_CONTENT这个Action //实现对图片的裁剪,必须要设置图片的属性和大小 intent.setType( "image/*" ); //获取任意图片类型 intent.putExtra( "crop" , "true" ); //滑动选中图片区域 intent.putExtra( "aspectX" , 1 ); //裁剪框比例1:1 intent.putExtra( "aspectY" , 1 ); intent.putExtra( "outputX" , 300 ); //输出图片大小 intent.putExtra( "outputY" , 300 ); intent.putExtra( "return-data" , true ); //有返回值 return intent; } |
1
2
|
Intent intent2 = doPickPhotoFromGallery(); startActivityForResult(intent2, PHOTO_WITH_DATA); |
1
2
3
4
5
6
7
8
9
|
/** 为图片创建不同的名称用于保存,避免覆盖 **/ public static String createFileName() { String fileName = "" ; Date date = new Date (System.currentTimeMillis()); // 系统当前时间 SimpleDateFormat dateFormat = new SimpleDateFormat( "'IMG'_yyyyMMdd_HHmmss" ); fileName = dateFormat.format(date) + ".jpg" ; return fileName; } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
/**Save image to the SD card**/ public static void savePhotoToSDCard( String path, String photoName, Bitmap photoBitmap) { if (android.os.Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED)) { File dir = new File(path); if (!dir.exists()) { dir.mkdirs(); } File photoFile = new File(path, photoName); //在指定路径下创建文件 FileOutputStream fileOutputStream = null ; try { fileOutputStream = new FileOutputStream(photoFile); if (photoBitmap != null ) { if (photoBitmap.compress(Bitmap.CompressFormat.PNG, 100 , fileOutputStream)) { fileOutputStream.flush(); } } } catch (FileNotFoundException e) { photoFile. delete (); e.printStackTrace(); } catch (IOException e) { photoFile. delete (); e.printStackTrace(); } finally { try { fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
/** * 插入图片列表适配器 * @author ZHF * */ public class ImagesListAdapter extends BaseAdapter { private Context context; private List< String > imagesList; //各个图片的路径 public ImagesListAdapter(Context context, List< String > imagesList) { this .context = context; this .imagesList = imagesList; } /**得到总的数量**/ @Override public int getCount() { // TODO Auto-generated method stub return imagesList.size(); } /**根据ListView位置返回View**/ @Override public Object getItem( int position) { return imagesList. get (position); //返回当前选中的item图片的路径 } /**根据ListView位置得到List中的ID**/ @Override public long getItemId( int position) { // TODO Auto-generated method stub return position; //返回当前选中项的Id } /**根据位置得到View对象**/ @Override public View getView( int position, View convertView, ViewGroup parent) { if (convertView == null ) { convertView = LayoutInflater.from(context).inflate(R.layout.newwrite_image_item, null ); } ImageView img = (ImageView) convertView.findViewById(R.id.newwrite_et_content_image); //图片列表项 if (!imagesList. get (position).equals( "" )) { //没有图片 Bitmap tempBitmap = BitmapFactory.decodeFile(imagesList. get (position)); //根据路径显示对应的图片 Bitmap newBitmap = new ImageManager(context).zoomBitmap(tempBitmap, tempBitmap.getWidth(), tempBitmap.getHeight() / 3 ); img.setImageBitmap(newBitmap); //对应的行上显示对应的图片 } return convertView; } } |