From 01b353f9038ac534ec309e9f252e4c6ca3ce5e77 Mon Sep 17 00:00:00 2001 From: Ryan Oldenburg Date: Fri, 26 Feb 2021 19:21:44 -0600 Subject: [PATCH] simpler --- src/pixie/images.nim | 32 +++++++------------------------- src/pixie/masks.nim | 18 ++++++------------ 2 files changed, 13 insertions(+), 37 deletions(-) diff --git a/src/pixie/images.nim b/src/pixie/images.nim index 8493a77..f777f2f 100644 --- a/src/pixie/images.nim +++ b/src/pixie/images.nim @@ -327,7 +327,7 @@ proc blur*(image: Image, radius: float32, outOfBounds = ColorRGBX()) = # TODO support offBounds for images. - template `*`(sample: ColorRGBX, a: uint32): array[4, uint32] = + proc `*`(sample: ColorRGBX, a: uint32): array[4, uint32] {.inline.} = [ sample.r * a, sample.g * a, @@ -355,22 +355,13 @@ proc blur*(image: Image, radius: float32, outOfBounds = ColorRGBX()) = for x in 0 ..< image.width: var values: array[4, uint32] for xx in x - radius ..< min(x + radius, 0): - let - sample = outOfBounds - a = lookup[xx - x + radius].uint32 - values += sample * a + values += outOfBounds * lookup[xx - x + radius] for xx in max(x - radius, 0) ..< min(x + radius, image.width): - let - sample = image.getRgbaUnsafe(xx, y) - a = lookup[xx - x + radius].uint32 - values += sample * a + values += image.getRgbaUnsafe(xx, y) * lookup[xx - x + radius] for xx in max(x - radius, image.width) ..< x + radius: - let - sample = outOfBounds - a = lookup[xx - x + radius].uint32 - values += sample * a + values += outOfBounds * lookup[xx - x + radius] blurX.setRgbaUnsafe(x, y, values.rgbx()) @@ -379,22 +370,13 @@ proc blur*(image: Image, radius: float32, outOfBounds = ColorRGBX()) = for x in 0 ..< image.width: var values: array[4, uint32] for yy in y - radius ..< min(y + radius, 0): - let - sample = outOfBounds - a = lookup[yy - y + radius].uint32 - values += sample * a + values += outOfBounds * lookup[yy - y + radius] for yy in max(y - radius, 0) ..< min(y + radius, image.height): - let - sample = blurX.getRgbaUnsafe(x, yy) - a = lookup[yy - y + radius].uint32 - values += sample * a + values += blurX.getRgbaUnsafe(x, yy) * lookup[yy - y + radius] for yy in max(y - radius, image.height) ..< y + radius: - let - sample = outOfBounds - a = lookup[yy - y + radius].uint32 - values += sample * a + values += outOfBounds * lookup[yy - y + radius] image.setRgbaUnsafe(x, y, values.rgbx()) diff --git a/src/pixie/masks.nim b/src/pixie/masks.nim index 57ca1ef..ec8ac7f 100644 --- a/src/pixie/masks.nim +++ b/src/pixie/masks.nim @@ -168,16 +168,13 @@ proc blur*(mask: Mask, radius: float32, outOfBounds: uint8 = 0) = for x in 0 ..< mask.width: var value: uint32 for xx in x - radius ..< min(x + radius, 0): - let sample = outOfBounds - value += sample * lookup[xx - x + radius].uint32 + value += outOfBounds * lookup[xx - x + radius] for xx in max(x - radius, 0) ..< min(x + radius, mask.width): - let sample = mask.getValueUnsafe(xx, y) - value += sample * lookup[xx - x + radius].uint32 + value += mask.getValueUnsafe(xx, y) * lookup[xx - x + radius] for xx in max(x - radius, mask.width) ..< x + radius: - let sample = outOfBounds - value += sample * lookup[xx - x + radius].uint32 + value += outOfBounds * lookup[xx - x + radius] blurX.setValueUnsafe(x, y, (value div 1024 div 255).uint8) @@ -186,16 +183,13 @@ proc blur*(mask: Mask, radius: float32, outOfBounds: uint8 = 0) = for x in 0 ..< mask.width: var value: uint32 for yy in y - radius ..< min(y + radius, 0): - let sample = outOfBounds - value += sample * lookup[yy - y + radius].uint32 + value += outOfBounds * lookup[yy - y + radius] for yy in max(y - radius, 0) ..< min(y + radius, mask.height): - let sample = blurX.getValueUnsafe(x, yy) - value += sample * lookup[yy - y + radius].uint32 + value += blurX.getValueUnsafe(x, yy) * lookup[yy - y + radius] for yy in max(y - radius, mask.height) ..< y + radius: - let sample = outOfBounds - value += sample * lookup[yy - y + radius].uint32 + value += outOfBounds * lookup[yy - y + radius] mask.setValueUnsafe(x, y, (value div 1024 div 255).uint8)