ImageBitmap


Graphics object that represents a 2 dimensional array of pixel information represented as ARGB values

Summary

Nested types

Provide an empty companion object to hang platform-specific companion extensions onto.

Public functions

Unit

Builds caches associated with the ImageBitmap that are used for drawing it.

Cmn
Unit
readPixels(
    buffer: IntArray,
    startX: Int,
    startY: Int,
    width: Int,
    height: Int,
    bufferOffset: Int,
    stride: Int
)

Copies the pixel data within the ImageBitmap into the given array.

Cmn

Public properties

ColorSpace

ColorSpace the Image renders in

Cmn
ImageBitmapConfig

Returns the current configuration of this Image, either:

Cmn
Boolean

Determines whether or not the ImageBitmap contains an alpha channel

Cmn
Int

The number of image pixels along the ImageBitmap's vertical axis.

Cmn
Int

The number of image pixels along the ImageBitmap's horizontal axis.

Cmn

Extension functions

Bitmap
android
Bitmap

This function is deprecated. Use asSkiaBitmap()

android
BufferedImage

This function is deprecated. use toAwtImage

android
BufferedImage

Convert Compose ImageBitmap to AWT BufferedImage

android
PixelMap
ImageBitmap.toPixelMap(
    startX: Int,
    startY: Int,
    width: Int,
    height: Int,
    buffer: IntArray,
    bufferOffset: Int,
    stride: Int
)

Convenience method to extract pixel information from the given ImageBitmap into a PixelMap that supports for querying pixel information based on

Cmn
Bitmap

Obtain a reference to the org.jetbrains.skia.Bitmap

android

Public functions

prepareToDraw

fun prepareToDraw(): Unit

Builds caches associated with the ImageBitmap that are used for drawing it. This method can be used as a signal to upload textures to the GPU to eventually be rendered

readPixels

fun readPixels(
    buffer: IntArray,
    startX: Int = 0,
    startY: Int = 0,
    width: Int = this.width,
    height: Int = this.height,
    bufferOffset: Int = 0,
    stride: Int = width
): Unit

Copies the pixel data within the ImageBitmap into the given array. Each value is represented as ARGB values packed into an Int. The stride parameter allows the caller to allow for gaps in the returned pixels array between rows. For normal packed, results, the stride value is equivalent to the width of the ImageBitmap. The returned colors are non-premultiplied ARGB values in the ColorSpaces.Srgb color space.

Note this method can block so it is recommended to not invoke this method in performance critical code paths

import androidx.compose.ui.graphics.PixelMap

val imageBitmap = createImageBitmap()

val buffer = IntArray(20 * 10)
imageBitmap.readPixels(
    buffer = buffer,
    startX = 8,
    startY = 9,
    width = 20,
    height = 10
)

val pixelmap = PixelMap(
    buffer = buffer,
    width = 20,
    height = 10,
    stride = 20,
    bufferOffset = 0
)

// create a histogram to count the number of occurrences of a color within the specified
// subsection of the provided ImageBitmap
val histogram = HashMap<Color, Int>()
for (x in 0 until pixelmap.width) {
    for (y in 0 until pixelmap.height) {
        val color = pixelmap[x, y]
        val colorCount = histogram[color] ?: 0
        histogram[color] = (colorCount + 1)
    }
}
Parameters
buffer: IntArray

The array to store the ImageBitmap's colors. By default this allocates an IntArray large enough to store all the pixel information. Consumers of this API are advised to use the smallest IntArray necessary to extract relevant pixel information, that is the 2 dimensional area of the section of the ImageBitmap to be queried.

startX: Int = 0

The x-coordinate of the first pixel to read from the ImageBitmap

startY: Int = 0

The y-coordinate of the first pixel to read from the ImageBitmap

width: Int = this.width

The number of pixels to read from each row

height: Int = this.height

The number of rows to read

bufferOffset: Int = 0

The first index to write into the buffer array, this defaults to 0

stride: Int = width

The number of entries in buffer to skip between rows (must be >= width

Public properties

colorSpace

val colorSpaceColorSpace

ColorSpace the Image renders in

config

val configImageBitmapConfig

Returns the current configuration of this Image, either:

hasAlpha

val hasAlphaBoolean

Determines whether or not the ImageBitmap contains an alpha channel

height

val heightInt

The number of image pixels along the ImageBitmap's vertical axis.

width

val widthInt

The number of image pixels along the ImageBitmap's horizontal axis.

Extension functions

asAndroidBitmap

fun ImageBitmap.asAndroidBitmap(): Bitmap
Throws
kotlin.UnsupportedOperationException

if this ImageBitmap is not backed by an android.graphics.Bitmap

asDesktopBitmap

fun ImageBitmap.asDesktopBitmap(): Bitmap
Throws
kotlin.UnsupportedOperationException

if this ImageBitmap is not backed by an org.jetbrains.skia.Image

asAwtImage

fun ImageBitmap.asAwtImage(): BufferedImage

Convert Compose ImageBitmap to AWT BufferedImage

toAwtImage

fun ImageBitmap.toAwtImage(): BufferedImage

Convert Compose ImageBitmap to AWT BufferedImage

toPixelMap

fun ImageBitmap.toPixelMap(
    startX: Int = 0,
    startY: Int = 0,
    width: Int = this.width,
    height: Int = this.height,
    buffer: IntArray = IntArray(width * height),
    bufferOffset: Int = 0,
    stride: Int = width
): PixelMap

Convenience method to extract pixel information from the given ImageBitmap into a PixelMap that supports for querying pixel information based on

Note this method can block so it is recommended to not invoke this method in performance critical code paths

import androidx.compose.ui.graphics.toPixelMap

val imageBitmap = createImageBitmap()

// Sample a 3 by 2 subsection of the given ImageBitmap
// starting at the coordinate (48, 49)
val pixelmap = imageBitmap.toPixelMap(
    startX = 48,
    startY = 49,
    width = 3,
    height = 2
)

// create a histogram to count the number of occurrences of a color within the specified
// subsection of the provided ImageBitmap
val histogram = HashMap<Color, Int>()
for (x in 0 until pixelmap.width) {
    for (y in 0 until pixelmap.height) {
        val color = pixelmap[x, y]
        val colorCount = histogram[color] ?: 0
        histogram[color] = (colorCount + 1)
    }
}
Parameters
startX: Int = 0

The x-coordinate of the first pixel to read from the ImageBitmap

startY: Int = 0

The y-coordinate of the first pixel to read from the ImageBitmap

width: Int = this.width

The number of pixels to read from each row

height: Int = this.height

The number of rows to read

buffer: IntArray = IntArray(width * height)

The array to store the ImageBitmap's colors. By default this allocates an IntArray large enough to store all the pixel information. Consumers of this API are advised to use the smallest IntArray necessary to extract relevant pixel information

bufferOffset: Int = 0

The first index to write into the buffer array, this defaults to 0

stride: Int = width

The number of entries in buffer to skip between rows (must be >= width

See also
readPixels

asSkiaBitmap

fun ImageBitmap.asSkiaBitmap(): Bitmap

Obtain a reference to the org.jetbrains.skia.Bitmap

Throws
kotlin.UnsupportedOperationException

if this ImageBitmap is not backed by an org.jetbrains.skia.Image