Nick
03/14/2025, 1:49 AMval nsImage = bitmap.readPixels()?.let { pixels ->
NSImage(data = pixels.usePinned {
NSData.create(it.addressOf(0), pixels.size.convert())
})
}
i've also only found this helper for NSData -> skiko Image. nothing for the other direction: https://github.com/JetBrains/skiko/blob/master/skiko/src/darwinMain/kotlin/org/jetbrains/skia/Image.darwin.kt
Slack ConversationBrill
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
}
You should then be able to take those bytes and create an NSData with them.Nick
03/15/2025, 1:41 AM