Jetpack Compose как создать растровое изображение определенного размера и конфигурации?

#android #android-jetpack-compose

Вопрос:

Карта изображений загружается и изображение с

 ImageBitmap.imageResource(
        LocalContext.current.resources,
        R.drawable.landscape1
    )
 

также в нем есть функция, которую можно вызвать с некоторыми параметрами

 ImageBitmap(
        width = 300,
        height = 300,
        config = ImageBitmapConfig.Argb8888,
        hasAlpha = true,
        colorSpace = ColorSpaces.Srgb
    )
 

он возвращает и опустошает растровое изображение без данных пикселей, возможно ли создать растровое изображение с некоторыми конкретными конфигурациями?

Есть ли что-то подобное для ImageBitmap?

 val option = BitmapFactory.Options()
option.inPreferredConfig = Bitmap.Config.ARGB_8888
val bitmap: Bitmap = BitmapFactory.decodeResource(
    LocalContext.current.resources,
    R.drawable.landscape1,
    option
)
 

Ответ №1:

Вы можете конвертировать Bitmap в ImageBitmap :

 val option = BitmapFactory.Options()
option.inPreferredConfig = Bitmap.Config.ARGB_8888
val bitmap = BitmapFactory.decodeResource(
    LocalContext.current.resources,
    R.drawable.test,
    option
).asImageBitmap()
 

Обратите внимание, что на каждую повторную композицию уйдет значительное количество времени, поэтому вы, вероятно, захотите обернуть ее remember

Комментарии:

1. Ваш ответ верен, но поскольку для ImageBitmap существует аналогичная функция с конфигурациями, я задаюсь вопросом, есть ли такая функция для ImageBitmap без какого-либо преобразования. И в любом случае, какой смысл иметь пустую карту изображений?

2. @Thracian Единственное применение этой забавы, которое я нашел, — это вот это . Похоже, он просто предназначался для создания пустого растрового изображения, которое будет использоваться для холста в будущем. В любом случае, если вы посмотрите на источники обоих ImageBitmap(width, height, ..) , и asImageBitmap() вы увидите, что ImageBitmap это всего лишь оболочка для Bitmap .