Skip to content

Commit

Permalink
Utilized getPixels for applyBitmapFilter. I think the Bitmap cl…
Browse files Browse the repository at this point in the history
…ass 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.
  • Loading branch information
therealbluepandabear committed Jul 12, 2022
1 parent 62a13aa commit ca48d41
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 20 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package com.therealbluepandabear.pixapencil.activities.canvas.canvascommands

import android.graphics.Color
import com.therealbluepandabear.pixapencil.activities.canvas.CanvasActivity
import com.therealbluepandabear.pixapencil.extensions.getPixel
import com.therealbluepandabear.pixapencil.extensions.iterate
import com.therealbluepandabear.pixapencil.extensions.filterBitmap
import com.therealbluepandabear.pixapencil.fragments.canvas.pixelGridViewInstance
import com.therealbluepandabear.pixapencil.models.BitmapAction

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

pixelGridViewInstance.pixelGridViewBitmap.iterate {
val colorAtCoordinates = pixelGridViewInstance.pixelGridViewBitmap.getPixel(it)

if (colorAtCoordinates != Color.TRANSPARENT) {
val color = filterLambda(colorAtCoordinates)

overrideSetPixel(it, color, ignoreBrush = true, ignoreSymmetry = true)
}
pixelGridViewInstance.pixelGridViewBitmap.filterBitmap(filterLambda) { coordinates, color ->
overrideSetPixel(coordinates, color, ignoreBrush = true, ignoreSymmetry = true)
}


baseReference.viewModel.bitmapActionData.add(baseReference.viewModel.currentBitmapAction!!)
baseReference.viewModel.currentBitmapAction = null

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,6 @@ import com.therealbluepandabear.pixapencil.enums.OverlayType
import com.therealbluepandabear.pixapencil.models.Coordinates
import com.therealbluepandabear.pixapencil.models.MatrixInfo

fun Bitmap.iterate(func: (Coordinates) -> Unit) {
for (i_1 in 0 until width) {
for (i_2 in 0 until height) {
func.invoke(Coordinates(i_1, i_2))
}
}
}

fun Bitmap.size(): Int {
return width * height
}
Expand Down Expand Up @@ -59,6 +51,21 @@ fun Bitmap.getNumberOfUniqueColors(excludeTransparentPixels: Boolean = true): In
return colors.size
}

fun Bitmap.filterBitmap(func: (Int) -> Int, func2: (Coordinates, Int) -> Unit) {
val array = IntArray(size())

getPixels(array, 0, width, 0, 0, width, height)

for (i in array.indices) {
val color = array[i]

if (color != Color.TRANSPARENT) {
val filteredColor = func(color)
func2.invoke(Coordinates.fromIndex(i, width), filteredColor)
}
}
}

fun Bitmap.getColors(): MutableList<Int> {
val colors = mutableListOf<Int>()
val array = IntArray(size())
Expand Down

0 comments on commit ca48d41

Please sign in to comment.