我希望点击一个按钮,将图像视图保存到Kotlin中的android设备库。我有这个
val image = findViewById<ImageView>(R.id.QRImage)
字符串
ds97pgxw1#
您可以先将图像转换为位图,如以下代码所示:
val image = findViewById<ImageView>(R.id.QRImage) val imageBitmap = image.drawable.toBitmap()
字符串然后将位图保存在您想要的位置,如以下代码所示:
val fileOutputStream = FileOutputStream("Location") //location of the image imageBitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream)
型或者像下面的代码一样直接保存:
MediaStore.Images.Media.insertImage(context.contentResolver, imageBitmap, "Image title ", null)
型
zmeyuzjn2#
我想,这应该行得通:第一个月还有,这道题里写着:android - save image into gallery
f4t66c6m3#
使用下面的函数,它100%工作与目标SDK 30+
fun insertImage( cr: ContentResolver, source: Bitmap?, title: String?, description: String? ): String? { val values = ContentValues() values.put(Images.Media.TITLE, title) values.put(Images.Media.DISPLAY_NAME, title) values.put(Images.Media.DESCRIPTION, description) values.put(Images.Media.MIME_TYPE, "image/jpeg") // Add the date meta data to ensure the image is added at the front of the gallery values.put(Images.Media.DATE_ADDED, System.currentTimeMillis()) values.put(Images.Media.DATE_TAKEN, System.currentTimeMillis()) var url: Uri? = null var stringUrl: String? = null /* value to be returned */ try { url = cr.insert(Images.Media.EXTERNAL_CONTENT_URI, values) if (source != null) { val imageOut = cr.openOutputStream(url!!) try { source.compress(Bitmap.CompressFormat.JPEG, 50, imageOut) } finally { imageOut!!.close() } val id = ContentUris.parseId(url!!) // Wait until MINI_KIND thumbnail is generated. val miniThumb = Images.Thumbnails.getThumbnail(cr, id, Images.Thumbnails.MINI_KIND, null) // This is for backward compatibility. storeThumbnail(cr, miniThumb, id, 50f, 50f, Images.Thumbnails.MICRO_KIND) } else { cr.delete(url!!, null, null) url = null } Toast.makeText(this, "Image Saved to Gallery", Toast.LENGTH_LONG).show() } catch (e: Exception) { if (url != null) { cr.delete(url, null, null) url = null } } if (url != null) { stringUrl = url.toString() } return stringUrl } private fun storeThumbnail( cr: ContentResolver, source: Bitmap, id: Long, width: Float, height: Float, kind: Int ): Bitmap? { // create the matrix to scale it val matrix = Matrix() val scaleX = width / source.width val scaleY = height / source.height matrix.setScale(scaleX, scaleY) val thumb = Bitmap.createBitmap( source, 0, 0, source.width, source.height, matrix, true ) val values = ContentValues(4) values.put(Images.Thumbnails.KIND, kind) values.put(Images.Thumbnails.IMAGE_ID, id.toInt()) values.put(Images.Thumbnails.HEIGHT, thumb.height) values.put(Images.Thumbnails.WIDTH, thumb.width) val url = cr.insert(Images.Thumbnails.EXTERNAL_CONTENT_URI, values) return try { val thumbOut = cr.openOutputStream(url!!) thumb.compress(Bitmap.CompressFormat.JPEG, 100, thumbOut) thumbOut!!.close() thumb } catch (ex: FileNotFoundException) { null } catch (ex: IOException) { null }
3条答案
按热度按时间ds97pgxw1#
您可以先将图像转换为位图,如以下代码所示:
字符串
然后将位图保存在您想要的位置,如以下代码所示:
型
或者像下面的代码一样直接保存:
型
zmeyuzjn2#
我想,这应该行得通:第一个月
还有,这道题里写着:android - save image into gallery
f4t66c6m3#
使用下面的函数,它100%工作与目标SDK 30+
字符串