toPixelMap

Function

Common
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

Parameters

startXThe x-coordinate of the first pixel to read from the ImageBitmap
startYThe y-coordinate of the first pixel to read from the ImageBitmap
widthThe number of pixels to read from each row
heightThe number of rows to read
bufferThe 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
bufferOffsetThe first index to write into the buffer array, this defaults to 0
strideThe number of entries in buffer to skip between rows (must be >= width

Code Examples

ImageBitmapToPixelMapSample

/**
 * Sample showing how to obtain a [PixelMap] to query pixel information from an underlying
 * [ImageBitmap]
 */
fun ImageBitmapToPixelMapSample() {
    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)
        }
    }
}