simpler
This commit is contained in:
parent
004182a122
commit
01b353f903
2 changed files with 13 additions and 37 deletions
|
@ -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())
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in a new issue