diff --git a/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/ImageDecoders.kt b/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/ImageDecoders.kt new file mode 100644 index 0000000000..b393c1e912 --- /dev/null +++ b/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/ImageDecoders.kt @@ -0,0 +1,31 @@ +package org.jetbrains.compose.resources + +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.unit.Density +import org.jetbrains.compose.resources.vector.toImageVector + +/** + * Decodes a byte array of a Bitmap to an ImageBitmap. Supports JPEG, PNG, BMP, WEBP + * + * Different platforms can support additional formats. + * + * @return The converted ImageBitmap. + */ +@ExperimentalResourceApi +fun ByteArray.decodeToImageBitmap(): ImageBitmap { + val dumbDensity = 0 //any equal source and target density disable scaling here + return this.toImageBitmap(dumbDensity, dumbDensity) +} + +/** + * Decodes a byte array of a vector XML file to an ImageVector. + * + * @param density density to apply during converting the source units to the [ImageVector] units. + * + * @return The converted ImageVector. + */ +@ExperimentalResourceApi +fun ByteArray.decodeToImageVector(density: Density): ImageVector { + return this.toXmlElement().toImageVector(density) +} diff --git a/components/resources/library/src/skikoMain/kotlin/org/jetbrains/compose/resources/ImageDecoders.skiko.kt b/components/resources/library/src/skikoMain/kotlin/org/jetbrains/compose/resources/ImageDecoders.skiko.kt new file mode 100644 index 0000000000..fe5e92eab7 --- /dev/null +++ b/components/resources/library/src/skikoMain/kotlin/org/jetbrains/compose/resources/ImageDecoders.skiko.kt @@ -0,0 +1,17 @@ +package org.jetbrains.compose.resources + +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.unit.Density + +/** + * Decodes a byte array of an SVG file to a compose Painter. + * + * @param density density to apply during converting the source units to the [Painter] units. + * + * @return The converted Painter. + */ +@ExperimentalResourceApi +fun ByteArray.decodeToSvgPainter(density: Density): Painter { + return this.toSvgElement().toSvgPainter(density) +} \ No newline at end of file