M app/src/main/java/com/github/nacabaro/vbhelper/components/CharacterEntry.kt => app/src/main/java/com/github/nacabaro/vbhelper/components/CharacterEntry.kt +3 -3
@@ 13,7 13,9 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.FilterQuality
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.unit.dp
+import com.github.nacabaro.vbhelper.domain.Sprites
import com.github.nacabaro.vbhelper.utils.BitmapData
+import com.github.nacabaro.vbhelper.utils.getBitmap
import java.nio.ByteBuffer
@Composable
@@ 23,9 25,7 @@ fun CharacterEntry(
onClick: () -> Unit = { }
) {
val bitmap = remember (icon.bitmap) {
- Bitmap.createBitmap(icon.width, icon.height, Bitmap.Config.RGB_565).apply {
- copyPixelsFromBuffer(ByteBuffer.wrap(icon.bitmap))
- }
+ icon.getBitmap()
}
val imageBitmap = remember(bitmap) { bitmap.asImageBitmap() }
M app/src/main/java/com/github/nacabaro/vbhelper/components/DexDimEntry.kt => app/src/main/java/com/github/nacabaro/vbhelper/components/DexDimEntry.kt +2 -3
@@ 17,6 17,7 @@ import androidx.compose.ui.graphics.FilterQuality
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.unit.dp
import com.github.nacabaro.vbhelper.utils.BitmapData
+import com.github.nacabaro.vbhelper.utils.getBitmap
import java.nio.ByteBuffer
@Composable
@@ 27,9 28,7 @@ fun DexDiMEntry(
modifier: Modifier = Modifier
) {
val bitmap = remember (logo.bitmap) {
- Bitmap.createBitmap(logo.width, logo.height, Bitmap.Config.RGB_565).apply {
- copyPixelsFromBuffer(ByteBuffer.wrap(logo.bitmap))
- }
+ logo.getBitmap()
}
val imageBitmap = remember(bitmap) { bitmap.asImageBitmap() }
M app/src/main/java/com/github/nacabaro/vbhelper/utils/BitmapData.kt => app/src/main/java/com/github/nacabaro/vbhelper/utils/BitmapData.kt +28 -1
@@ 1,8 1,35 @@
package com.github.nacabaro.vbhelper.utils
+import android.graphics.Bitmap
+import com.github.cfogrady.vb.dim.sprite.SpriteData
+
// simple, but smooth
data class BitmapData (
val bitmap: ByteArray,
val width: Int,
val height: Int
-)>
\ No newline at end of file
+)
+
+fun BitmapData.getBitmap(): Bitmap {
+ return Bitmap.createBitmap(createARGBIntArray(), this.width, this.height, Bitmap.Config.HARDWARE)
+}
+
+fun BitmapData.createARGBIntArray(): IntArray {
+ // hack to get it into correct format by relying on the DIM Sprites methods since we haven't changed the raw pixel data at this point.
+ val bytes = SpriteData.Sprite.builder().width(this.width).height(this.height).pixelData(this.bitmap).build()
+ .get24BitRGB()
+ val result = IntArray(this.width*this.height)
+ for(i in result.indices) {
+ val originalIndex = i*3
+ val red = bytes[originalIndex].toUInt() and 0xFFu
+ val green = bytes[originalIndex+1].toUInt() and 0xFFu
+ val blue = bytes[originalIndex+2].toUInt() and 0xFFu
+ val alpha = if(red == 0u && blue == 0u && green == 0xFFu) 0 else 0xFF
+ result[i] = (alpha shl 24) or (red shl 16).toInt() or (green shl 8).toInt() or blue.toInt()
+ }
+ return result
+}
+
+fun List<BitmapData>.getBitmaps(): List<Bitmap> {
+ return this.map{it.getBitmap()}
+}<
\ No newline at end of file