Skip to content

Commit ca48d41

Browse files
author
therealbluepandabear
committed
Utilized getPixels for applyBitmapFilter. I think the Bitmap class has a better way of adding filters to a bitmap, so more research needs to be done, but there is a slight performance increase nonetheless.
1 parent 62a13aa commit ca48d41

2 files changed

Lines changed: 18 additions & 20 deletions

File tree

app/src/main/java/com/therealbluepandabear/pixapencil/activities/canvas/canvascommands/CanvasActivity+CanvasCommandsHelper+applyBitmapFilter.kt

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package com.therealbluepandabear.pixapencil.activities.canvas.canvascommands
22

3-
import android.graphics.Color
43
import com.therealbluepandabear.pixapencil.activities.canvas.CanvasActivity
5-
import com.therealbluepandabear.pixapencil.extensions.getPixel
6-
import com.therealbluepandabear.pixapencil.extensions.iterate
4+
import com.therealbluepandabear.pixapencil.extensions.filterBitmap
75
import com.therealbluepandabear.pixapencil.fragments.canvas.pixelGridViewInstance
86
import com.therealbluepandabear.pixapencil.models.BitmapAction
97

@@ -12,17 +10,10 @@ fun CanvasActivity.CanvasCommandsHelper.applyBitmapFilter(filterLambda: (Int) ->
1210
baseReference.viewModel.saved = false
1311
baseReference.viewModel.currentBitmapAction = BitmapAction(mutableListOf())
1412

15-
pixelGridViewInstance.pixelGridViewBitmap.iterate {
16-
val colorAtCoordinates = pixelGridViewInstance.pixelGridViewBitmap.getPixel(it)
17-
18-
if (colorAtCoordinates != Color.TRANSPARENT) {
19-
val color = filterLambda(colorAtCoordinates)
20-
21-
overrideSetPixel(it, color, ignoreBrush = true, ignoreSymmetry = true)
22-
}
13+
pixelGridViewInstance.pixelGridViewBitmap.filterBitmap(filterLambda) { coordinates, color ->
14+
overrideSetPixel(coordinates, color, ignoreBrush = true, ignoreSymmetry = true)
2315
}
2416

25-
2617
baseReference.viewModel.bitmapActionData.add(baseReference.viewModel.currentBitmapAction!!)
2718
baseReference.viewModel.currentBitmapAction = null
2819

app/src/main/java/com/therealbluepandabear/pixapencil/extensions/BitmapExtensions.kt

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,6 @@ import com.therealbluepandabear.pixapencil.enums.OverlayType
88
import com.therealbluepandabear.pixapencil.models.Coordinates
99
import com.therealbluepandabear.pixapencil.models.MatrixInfo
1010

11-
fun Bitmap.iterate(func: (Coordinates) -> Unit) {
12-
for (i_1 in 0 until width) {
13-
for (i_2 in 0 until height) {
14-
func.invoke(Coordinates(i_1, i_2))
15-
}
16-
}
17-
}
18-
1911
fun Bitmap.size(): Int {
2012
return width * height
2113
}
@@ -59,6 +51,21 @@ fun Bitmap.getNumberOfUniqueColors(excludeTransparentPixels: Boolean = true): In
5951
return colors.size
6052
}
6153

54+
fun Bitmap.filterBitmap(func: (Int) -> Int, func2: (Coordinates, Int) -> Unit) {
55+
val array = IntArray(size())
56+
57+
getPixels(array, 0, width, 0, 0, width, height)
58+
59+
for (i in array.indices) {
60+
val color = array[i]
61+
62+
if (color != Color.TRANSPARENT) {
63+
val filteredColor = func(color)
64+
func2.invoke(Coordinates.fromIndex(i, width), filteredColor)
65+
}
66+
}
67+
}
68+
6269
fun Bitmap.getColors(): MutableList<Int> {
6370
val colors = mutableListOf<Int>()
6471
val array = IntArray(size())

0 commit comments

Comments
 (0)