Refactor descrambling bitmap
parent
88b3e5cf34
commit
da6db9c1b4
@ -1,48 +0,0 @@
|
|||||||
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)
|
|
||||||
}
|
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
package org.koitharu.kotatsu.core.parser
|
||||||
|
|
||||||
|
import android.graphics.Canvas
|
||||||
|
import org.koitharu.kotatsu.parsers.bitmap.Bitmap
|
||||||
|
import org.koitharu.kotatsu.parsers.bitmap.Rect
|
||||||
|
import java.io.OutputStream
|
||||||
|
import android.graphics.Bitmap as AndroidBitmap
|
||||||
|
import android.graphics.Rect as AndroidRect
|
||||||
|
|
||||||
|
class BitmapWrapper private constructor(
|
||||||
|
private val androidBitmap: AndroidBitmap,
|
||||||
|
) : Bitmap {
|
||||||
|
|
||||||
|
private val canvas by lazy { Canvas(androidBitmap) } // is not always used, so initialized lazily
|
||||||
|
|
||||||
|
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 BitmapWrapper).androidBitmap
|
||||||
|
canvas.drawBitmap(androidSourceBitmap, src.toAndroidRect(), dst.toAndroidRect(), null)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun compressTo(output: OutputStream) {
|
||||||
|
androidBitmap.compress(AndroidBitmap.CompressFormat.PNG, 100, output)
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
fun create(width: Int, height: Int): Bitmap = BitmapWrapper(
|
||||||
|
AndroidBitmap.createBitmap(width, height, AndroidBitmap.Config.ARGB_8888),
|
||||||
|
)
|
||||||
|
|
||||||
|
fun create(bitmap: AndroidBitmap): Bitmap = BitmapWrapper(
|
||||||
|
if (bitmap.isMutable) bitmap else bitmap.copy(AndroidBitmap.Config.ARGB_8888, true),
|
||||||
|
)
|
||||||
|
|
||||||
|
private fun Rect.toAndroidRect() = AndroidRect(left, top, right, bottom)
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue