From 1cff0eeac43453d0afb3233fb8b2335523e22939 Mon Sep 17 00:00:00 2001 From: AwkwardPeak7 <48650614+AwkwardPeak7@users.noreply.github.com> Date: Thu, 23 May 2024 13:17:39 +0500 Subject: [PATCH] implement basic methods for descrambling images --- .../kotatsu/core/parser/BitmapImpl.kt | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 app/src/main/kotlin/org/koitharu/kotatsu/core/parser/BitmapImpl.kt diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/parser/BitmapImpl.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/parser/BitmapImpl.kt new file mode 100644 index 000000000..b55e8333d --- /dev/null +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/parser/BitmapImpl.kt @@ -0,0 +1,48 @@ +package org.koitharu.kotatsu.core.parser + +import android.graphics.Canvas +import android.graphics.Bitmap as AndroidBitmap +import android.graphics.Rect as AndroidRect +import org.koitharu.kotatsu.parsers.bitmap.Bitmap +import org.koitharu.kotatsu.parsers.bitmap.Rect + +class BitmapImpl private constructor() : Bitmap { + + lateinit var androidBitmap: AndroidBitmap + + private lateinit var canvas: Canvas + + override val height: Int + get() = androidBitmap.height + + override val width: Int + get() = androidBitmap.width + + override fun drawBitmap(sourceBitmap: Bitmap, src: Rect, dst: Rect) { + val androidSourceBitmap = (sourceBitmap as BitmapImpl).androidBitmap + + canvas.drawBitmap(androidSourceBitmap, src.toAndroidRect(), dst.toAndroidRect(), null) + } + + companion object { + fun create(width: Int, height: Int): Bitmap { + val instance = BitmapImpl() + instance.androidBitmap = AndroidBitmap.createBitmap(width, height, AndroidBitmap.Config.ARGB_8888) + instance.canvas = Canvas(instance.androidBitmap) + + return instance + } + + fun create(bitmap: AndroidBitmap): Bitmap { + val instance = BitmapImpl() + instance.androidBitmap = bitmap.copy(AndroidBitmap.Config.ARGB_8888, true) + instance.canvas = Canvas(instance.androidBitmap) + + return instance + } + } +} + +private fun Rect.toAndroidRect(): AndroidRect { + return AndroidRect(left, top, right, bottom) +}