admin管理员组

文章数量:1516870

Android 保存bitmap到相册

安卓原生的保存相册方法可以用但是可调参数很少,对三星这样的手机支持不好,图片的创建时间一般为1970.1.1,可以通过复写android原生的方法来添加相关参数,比如照片创建时间和gps位置信息什么的

下面是保存到相册用的函数

/*** Insert an image and create a thumbnail for it.** @param cr          The content resolver to use* @param source      The stream to use for the image* @param title       The name of the image* @param description The description of the image* @return The URL to the newly created image, or <code>null</code> if the image failed to be stored* for any reason.*/public static String insertImage(ContentResolver cr, Bitmap source,String title, String description, String fileName) {ContentValues values = new ContentValues();values.put(MediaStore.Images.Media.TITLE, title);values.put(MediaStore.Images.Media.DESCRIPTION, description);values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");values.put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis());values.put(MediaStore.Images.Media.DATE_MODIFIED, System.currentTimeMillis()));values.put(MediaStore.Images.Media.DATE_TAKEN,System.currentTimeMillis());
);values.put(MediaStore.Images.Media.DISPLAY_NAME, fileName);values.put(MediaStore.Images.Media.LATITUDE,36);values.put(MediaStore.Images.Media.LONGITUDE, 120);values.put(MediaStore.Images.Media.BUCKET_DISPLAY_NAME, "6666");Uri url = null;String stringUrl = null;    /* value to be returned */try {url = cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);if (source != null) {OutputStream imageOut = cr.openOutputStream(url);try {sourcepress(Bitmap.CompressFormat.JPEG, 36, imageOut);} finally {imageOut.close();}long id = ContentUris.parseId(url);// Wait until MINI_KIND thumbnail is generated.Bitmap miniThumb = MediaStore.Images.Thumbnails.getThumbnail(cr, id,MediaStore.Images.Thumbnails.MINI_KIND, null);// This is for backward compatibility.Bitmap microThumb = StoreThumbnail(cr, miniThumb, id, 50F, 50F,MediaStore.Images.Thumbnails.MICRO_KIND);} else {JLogUtils.i("Alex", "Failed to create thumbnail, removing original");cr.delete(url, null, null);url = null;}} catch (Exception e) {Log.i("Alex", "Failed to insert image", e);if (url != null) {cr.delete(url, null, null);url = null;}}if (url != null) {stringUrl = url.toString();}return stringUrl;}private static final Bitmap StoreThumbnail(ContentResolver cr,Bitmap source,long id,float width, float height,int kind) {// create the matrix to scale itMatrix matrix = new Matrix();float scaleX = width / source.getWidth();float scaleY = height / source.getHeight();matrix.setScale(scaleX, scaleY);Bitmap thumb = Bitmap.createBitmap(source, 0, 0,source.getWidth(),source.getHeight(), matrix,true);ContentValues values = new ContentValues(4);values.put(MediaStore.Images.Thumbnails.KIND, kind);values.put(MediaStore.Images.Thumbnails.IMAGE_ID, (int) id);values.put(MediaStore.Images.Thumbnails.HEIGHT, thumb.getHeight());values.put(MediaStore.Images.Thumbnails.WIDTH, thumb.getWidth());Uri url = cr.insert(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, values);try {OutputStream thumbOut = cr.openOutputStream(url);thumbpress(Bitmap.CompressFormat.JPEG, 100, thumbOut);thumbOut.close();return thumb;} catch (FileNotFoundException ex) {return null;} catch (IOException ex) {return null;}}

调用方法


try {ContentResolver cr = SelectPhotoActivity.this.getContentResolver();JImageUtils.insertImage(cr, currPhoto, "qraved" + JTimeUtils.getCurrentTimeLong(), "a photo from app", "我是filename没啥用");} catch (Exception e) {e.printStackTrace();}//对某些不更新相册的应用程序强制刷新Intent intent2 = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);Uri uri = Uri.fromFile(new File("/sdcard/image.jpg"));//固定写法intent2.setData(uri);PhotoActivity.this.sendBroadcast(intent2);



本文标签: Android 保存bitmap到相册