Pau Marzo
12/12/2024, 3:34 PMPau Marzo
12/12/2024, 3:35 PMobject ImageBitmapSerializer2 : KSerializer<Image> {
private val base64Serializer = String.serializer()
override val descriptor: SerialDescriptor = base64Serializer.descriptor
override fun serialize(encoder: Encoder, value: Image) {
val base64 = value.toBase64()
encoder.encodeSerializableValue(base64Serializer, base64)
}
override fun deserialize(decoder: Decoder): Image {
val base64 = decoder.decodeSerializableValue(base64Serializer)
return base64.fromBase64()
}
@OptIn(ExperimentalEncodingApi::class)
fun Image.toBase64(): String {
// Directly encode to PNG with minimal overhead
val encodedBytes = this.encodeToData(EncodedImageFormat.PNG, 80)?.bytes
return Base64.encode(encodedBytes ?: byteArrayOf())
}
@OptIn(ExperimentalEncodingApi::class)
fun String.fromBase64(): Image {
return Image.makeFromEncoded(Base64.decode(this))
}
} @Serializable(with = ImageBitmapSerializer::class)
var bitmap: Image? = null, (there can be multiple)
Pau Marzo
12/12/2024, 3:37 PMviewModelScope.launch(defaultAsyncDispatcher) {
string = json.encodeToString(currentRootNode)
//currentRootNode can have a lot of images or only one (it doesnt matter cause it still lags)
} in wasm actual val defaultAsyncDispatcher: CoroutineDispatcher
get() = Dispatchers.Default
Pau Marzo
12/12/2024, 3:38 PMArtem Kobzar
12/20/2024, 12:09 PMsandwwraith
12/20/2024, 1:10 PMPau Marzo
05/09/2025, 1:58 PM