Nick
03/14/2025, 1:49 AMval nsImage = bitmap.readPixels()?.let { pixels ->
    NSImage(data = pixels.usePinned {
        NSData.create(it.addressOf(0), pixels.size.convert())
    })
}Brill
03/14/2025, 1:45 PM// Common
expect fun ImageBitmap.encodeToBytes(encoding: BitmapEncoding, quality: Int = 100): ByteArray?// Android
import android.graphics.Bitmap
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.asAndroidBitmap
import java.io.ByteArrayOutputStream
actual fun ImageBitmap.encodeToBytes(
    encoding: BitmapEncoding,
    quality: Int,
): ByteArray? {
    ByteArrayOutputStream().use { bytes ->
        this.asAndroidBitmap().compress(
            when (encoding) {
                BitmapEncoding.JPEG -> {
                    Bitmap.CompressFormat.JPEG
                }
                BitmapEncoding.PNG -> {
                    Bitmap.CompressFormat.PNG
                }
            }, quality, bytes
        )
        return bytes.toByteArray()
    }
}// Native
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.asSkiaBitmap
import org.jetbrains.skia.Image
actual fun ImageBitmap.encodeToBytes(
    encoding: BitmapEncoding,
    quality: Int,
): ByteArray? {
    return Image.makeFromBitmap(this.asSkiaBitmap())
        .encodeToData(
            when (encoding) {
                BitmapEncoding.JPEG -> {
                    org.jetbrains.skia.EncodedImageFormat.JPEG
                }
                BitmapEncoding.PNG -> {
                    org.jetbrains.skia.EncodedImageFormat.PNG
                }
            }, quality
        )?.bytes
}Nick
03/15/2025, 1:41 AM