代码之家  ›  专栏  ›  技术社区  ›  Foobar

从ImageView保存到文件时保留位图尺寸

  •  1
  • Foobar  · 技术社区  · 7 年前

    我想把里面的抽屉存起来 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)
    

    如果 包含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()
    }
    

    但是,如果 图片框 包含静态图像-当我使用以下方法将其保存到文件中时,不会保留维度:

    //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

    Screenshot_Of_Gif

    但请注意静态图像的大小是如何急剧扩展的:

    Screenshot_Of_Static_Image

    (在这两个例子中,我都向Facebook Messenger应用程序发送了一个文件,它用来在聊天中显示图像)。

    虽然我的代码示例是用Kotlin编写的,但用Java编写的答案也会很有帮助。

    更新1-我打印了 图片框 和位图的代码如下,它们是相同的。

    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)
    
    0 回复  |  直到 7 年前
    推荐文章