Glide: Сжатие / изменение размера целевого объекта без ImageView по умолчанию? - PullRequest
0 голосов
/ 23 мая 2019

Я загружаю Google Map GroundOverlay с Glide, как это

Glide.with(this)
            .asBitmap()
            .load("url")
            .into(updateOverlayTarget2)

с целью

private val updateOverlayTarget = object : SimpleTarget<Bitmap>() {
        override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
            val bounds = LatLngBounds(LatLng(34.5362, -96.9535), LatLng(39.9342, -89.8475))
            val overlay = GroundOverlayOptions()
                .image(BitmapDescriptorFactory.fromBitmap(resource))
                .positionFromBounds(bounds)

            googleMap1?.addGroundOverlay(overlay)
        }
    }

Это прекрасно работает для меня. Но когда я загружаю удаленный образ, поместите его в папку drawable и вместо BitmapDescriptorFactory.fromBitmap(resource) я использую BitmapDescriptorFactory.fromResource(resourceId), и я сразу же получаю ошибку OutOf Memory. В моем изображении есть альфа-канал.

Я немного запутался здесь. Glide здесь не должно использоваться значение по умолчанию RGB_565, поскольку в этом формате альфа отсутствует. Это делает какое-то другое сжатие?

1 Ответ

0 голосов
/ 24 мая 2019

Glide не должен использовать RGB_565 по умолчанию, поскольку в этом формате альфа отсутствует.Делает ли он какое-то другое сжатие?

Если вы попытаетесь напрямую использовать новое изображение из нарисованного в onResourceReady, оно, скорее всего, выдаст OOM, если изображение большоепотому что он еще не был загружен.

Вы должны загрузить изображение из прорисовываемого асинхронно, например:

Glide.with(this)
        .asBitmap()
        .load(R.drawable.your_image)
        .into(object : CustomTarget<Bitmap>(){
            override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
                // Now here you can use resource
            }
            override fun onLoadCleared(placeholder: Drawable?) {
            }
        })

Или вы можете использовать это также для получения растрового изображения синхронно

val bitmap = Glide.with(this)
            .asBitmap()
            .load(R.drawable.your_image)
            .submit().get()
...