我正在尝试将 a 中的可绘制对象保存ImageView
到文件中。我使用 Glide 将图像加载到ImageView
这样的位置:
Glide.with(context)
//items[position] is a string that represents a url
.load(items[position])
.listener(object : RequestListener<Drawable> {
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean {
holder.progressBar.visibility = View.GONE
return false
}
override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
holder.progressBar.visibility = View.GONE
return false
}
})
.into(holder.imageView)
如果ImageView
包含 GIF,我可以使用以下方法将其保存到文件中而不会出现问题:
//In a typical use case, gifDrawable will equal holder.imageView.(gifDrawable.constantState.newDrawable().mutate()) as GifDrawable
private fun gifDrawableToFile(gifDrawable: GifDrawable, gifFile: File) {
val byteBuffer = gifDrawable.buffer
val output = FileOutputStream(gifFile)
val bytes = ByteArray(byteBuffer.capacity())
(byteBuffer.duplicate().clear() as ByteBuffer).get(bytes)
output.write(bytes, 0, bytes.size)
output.close()
}
但是,如果ImageView
包含静态图像 - 当我使用以下方法将其保存到文件时,尺寸不会保留:
//In a typical use case, bitmapDrawable will equal holder.imageView.drawable.constantState.newDrawable().mutate() as BitmapDrawable
bitmapDrawable.bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream)
上面的代码无法保持静态图像在 imageview 中的尺寸。
例如 - 注意 GIF 如何保持它在 内部的尺寸imageView
:
但请注意,静态图像的大小是如何急剧扩大的:
(在这两个示例中,我都向 Facebook Messenger 应用程序发送了一个文件,该应用程序用于在聊天中显示图像)。
虽然我的代码示例是在 Kotlin 中,但 Java 中的答案也会有所帮助。
更新 1 - 我用以下代码打印了位图和位图的宽度,ImageView
它们是相同的。
val bitmap = (holder.imageView.drawable as BitmapDrawable).bitmap
Log.d("APP","Bwidth: " + bitmap.width)
Log.d("APP","Bheight:" + bitmap.height)
Log.d("APP","Iwidth" + holder.imageView.width)
Log.d("PP","Iheight" + holder.imageView.height)
但是高度/宽度的输出都是 315 和 300。
更新 2 -
将位图保存到这样的文件后,我打印了位图的宽度。宽度和高度仍然是 315 和 300。
val bmOptions = BitmapFactory.Options()
val bitmap = BitmapFactory.decodeFile(imageFile.absolutePath, bmOptions)
Log.d("APP","Bitmap from file width: " + bitmap.width)
Log.d("APP","Bitmap from file height: " + bitmap.height)