Для отрисовки изображений применяется функция drawImage(). Она имеет ряд версий. Простая версия:
fun drawImage( image: ImageBitmap, topLeft: Offset = Offset.Zero, alpha: @FloatRange(from = 0.0, to = 1.0) Float = 1.0f, style: DrawStyle = Fill, colorFilter: ColorFilter? = null, blendMode: BlendMode = DefaultBlendMode ): Unit
Эта функция принимает следующие параметры:
image
: изображение - объект ImageBitmap для отрисовки
topLeft
: координаты верхнего левого угла на Canvas
alpha
: прозрачность, применяемая к изображению в виде значения из диапазона от 0.0f до 1.0f
style
: стиль заполнения изображения
colorFilter
: цветовой фильтр ColorFilter, который применяется к изображению
blendMode
: алгоритм смешивания, применяемый к изображению
Другая версия функции:
fun drawImage( image: ImageBitmap, srcOffset: IntOffset = IntOffset.Zero, srcSize: IntSize = IntSize(image.width, image.height), dstOffset: IntOffset = IntOffset.Zero, dstSize: IntSize = srcSize, alpha: @FloatRange(from = 0.0, to = 1.0) Float = 1.0f, style: DrawStyle = Fill, colorFilter: ColorFilter? = null, blendMode: BlendMode = DefaultBlendMode, filterQuality: FilterQuality = DefaultFilterQuality ): Unit
Здесь добавлется четыре параметра, которые позволяют вывести часть изображения в определенную часть на Canvas:
srcOffset
: смещение на оригинальном изображении, откуда надо взять часть изображения
srcSize
: прямоугольная область, которая берется из оригинального изображения
dstOffset
: смещение верхнего левого угла, на который будет позиционироваться изображение
dstSize
: прямоугольная область, в которую вписывается изображение
Допустим, в папку res/drawable добавлено некоторое изображение. В моем случае это файл "forest.png"
Выведем это изображение на Canvas:
package com.example.helloapp import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.Canvas import androidx.compose.foundation.background import androidx.compose.foundation.layout.size import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import androidx.compose.ui.res.imageResource import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.ImageBitmap class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val image = ImageBitmap.imageResource(R.drawable.forest) Canvas(Modifier.size(400.dp, 300.dp).background(Color.LightGray)) { drawImage( image = image, topLeft = Offset(x = 0f, y = 0f) ) } } } }