|
|
|
@ -8,11 +8,9 @@ import android.graphics.Rect
|
|
|
|
import androidx.annotation.ColorInt
|
|
|
|
import androidx.annotation.ColorInt
|
|
|
|
import androidx.core.graphics.alpha
|
|
|
|
import androidx.core.graphics.alpha
|
|
|
|
import androidx.core.graphics.blue
|
|
|
|
import androidx.core.graphics.blue
|
|
|
|
import androidx.core.graphics.get
|
|
|
|
|
|
|
|
import androidx.core.graphics.green
|
|
|
|
import androidx.core.graphics.green
|
|
|
|
import androidx.core.graphics.red
|
|
|
|
import androidx.core.graphics.red
|
|
|
|
import com.davemorrissey.labs.subscaleview.ImageSource
|
|
|
|
import com.davemorrissey.labs.subscaleview.ImageSource
|
|
|
|
import com.davemorrissey.labs.subscaleview.decoder.ImageRegionDecoder
|
|
|
|
|
|
|
|
import com.davemorrissey.labs.subscaleview.decoder.SkiaPooledImageRegionDecoder
|
|
|
|
import com.davemorrissey.labs.subscaleview.decoder.SkiaPooledImageRegionDecoder
|
|
|
|
import kotlinx.coroutines.Dispatchers
|
|
|
|
import kotlinx.coroutines.Dispatchers
|
|
|
|
import kotlinx.coroutines.async
|
|
|
|
import kotlinx.coroutines.async
|
|
|
|
@ -23,7 +21,6 @@ import kotlinx.coroutines.sync.Mutex
|
|
|
|
import kotlinx.coroutines.sync.withLock
|
|
|
|
import kotlinx.coroutines.sync.withLock
|
|
|
|
import kotlinx.coroutines.withContext
|
|
|
|
import kotlinx.coroutines.withContext
|
|
|
|
import org.koitharu.kotatsu.core.util.SynchronizedSieveCache
|
|
|
|
import org.koitharu.kotatsu.core.util.SynchronizedSieveCache
|
|
|
|
import org.koitharu.kotatsu.core.util.ext.use
|
|
|
|
|
|
|
|
import kotlin.math.abs
|
|
|
|
import kotlin.math.abs
|
|
|
|
import kotlin.math.max
|
|
|
|
import kotlin.math.max
|
|
|
|
import kotlin.math.min
|
|
|
|
import kotlin.math.min
|
|
|
|
@ -49,16 +46,16 @@ class EdgeDetector(private val context: Context) {
|
|
|
|
|
|
|
|
|
|
|
|
val fullBitmap = decoder.decodeRegion(
|
|
|
|
val fullBitmap = decoder.decodeRegion(
|
|
|
|
Rect(0, 0, size.x, size.y),
|
|
|
|
Rect(0, 0, size.x, size.y),
|
|
|
|
sampleSize
|
|
|
|
sampleSize,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
val edges = coroutineScope {
|
|
|
|
val edges = coroutineScope {
|
|
|
|
listOf(
|
|
|
|
listOf(
|
|
|
|
async { detectLeftRightEdge(fullBitmap, size, sampleSize, isLeft = true) },
|
|
|
|
async { detectLeftRightEdge(fullBitmap, size, sampleSize, isLeft = true) },
|
|
|
|
async { detectTopBottomEdge(fullBitmap, size, sampleSize, isTop = true) },
|
|
|
|
async { detectTopBottomEdge(fullBitmap, size, sampleSize, isTop = true) },
|
|
|
|
async { detectLeftRightEdge(fullBitmap, size, sampleSize, isLeft = false) },
|
|
|
|
async { detectLeftRightEdge(fullBitmap, size, sampleSize, isLeft = false) },
|
|
|
|
async { detectTopBottomEdge(fullBitmap, size, sampleSize, isTop = false) },
|
|
|
|
async { detectTopBottomEdge(fullBitmap, size, sampleSize, isTop = false) },
|
|
|
|
).awaitAll()
|
|
|
|
).awaitAll()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
var hasEdges = false
|
|
|
|
var hasEdges = false
|
|
|
|
|