stevenyomi 205d95cc07 Migrate to lib-multisrc (#1237)
* adjustments

* Run generator

* Remove multisrc project

* add lib dependencies

* Remove multisrc from build scripts

* Remove build condition
2024-02-18 20:10:37 +00:00

66 lines
2.2 KiB
Kotlin

package eu.kanade.tachiyomi.multisrc.peachscan
import android.graphics.Bitmap
import android.graphics.Rect
import tachiyomi.decoder.ImageDecoder
import java.io.ByteArrayInputStream
import java.io.IOException
import java.lang.reflect.Method
/**
* TachiyomiJ2K is on a 2-year-old version of ImageDecoder at the time of writing,
* with a different signature than the one being used as a compile-only dependency.
*
* Because of this, if [ImageDecoder.decode] is called as-is on TachiyomiJ2K, we
* end up with a [NoSuchMethodException].
*
* This is a hack for determining which signature to call when decoding images.
*/
object PeachScanUtils {
private var decodeMethod: Method
private var isNewDecodeMethod = false
init {
val rectClass = Rect::class.java
val booleanClass = Boolean::class.java
val intClass = Int::class.java
val byteArrayClass = ByteArray::class.java
decodeMethod = try {
isNewDecodeMethod = true
// decode(region, rgb565, sampleSize, applyColorManagement, displayProfile)
ImageDecoder::class.java.getMethod("decode", rectClass, booleanClass, intClass, booleanClass, byteArrayClass)
} catch (e: NoSuchMethodException) {
isNewDecodeMethod = false
// decode(region, rgb565, sampleSize)
ImageDecoder::class.java.getMethod("decode", rectClass, booleanClass, intClass)
}
}
fun decodeImage(data: ByteArray, rgb565: Boolean, filename: String, entryName: String): Bitmap {
val decoder = ImageDecoder.newInstance(ByteArrayInputStream(data))
if (decoder == null || decoder.width <= 0 || decoder.height <= 0) {
throw IOException("Falha ao inicializar o decodificador de imagem")
}
val rect = Rect(0, 0, decoder.width, decoder.height)
val bitmap = if (isNewDecodeMethod) {
decodeMethod.invoke(decoder, rect, rgb565, 1, false, null)
} else {
decodeMethod.invoke(decoder, rect, rgb565, 1)
} as Bitmap?
decoder.recycle()
if (bitmap == null) {
throw IOException("Não foi possível decodificar a imagem $filename#$entryName")
}
return bitmap
}
}