From ed5679787d17257a0a21ba90c8e57cf1dd43a094 Mon Sep 17 00:00:00 2001 From: treeform Date: Sat, 5 Dec 2020 00:28:42 -0800 Subject: [PATCH] Fix flip. --- src/pixie/images.nim | 20 ++++++++++++++------ tests/images/flipped1.png | Bin 0 -> 356 bytes tests/images/flipped2.png | Bin 0 -> 351 bytes tests/images/flipped3.png | Bin 0 -> 343 bytes tests/test_flips.nim | 16 ++++++++++++++++ 5 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 tests/images/flipped1.png create mode 100644 tests/images/flipped2.png create mode 100644 tests/images/flipped3.png create mode 100644 tests/test_flips.nim diff --git a/src/pixie/images.nim b/src/pixie/images.nim index d230c30..b3080ce 100644 --- a/src/pixie/images.nim +++ b/src/pixie/images.nim @@ -126,17 +126,25 @@ proc magnifyBy2*(image: Image): Image = proc flipHorizontal*(image: Image) = ## Flips the image around the Y axis. + let w = image.width div 2 for y in 0 ..< image.height: - for x in 0 ..< image.width: - let rgba = image.getRgbaUnsafe(x, y) - image.setRgbaUnsafe(image.width - x - 1, y, rgba) + for x in 0 ..< w: + let + rgba1 = image.getRgbaUnsafe(x, y) + rgba2 = image.getRgbaUnsafe(image.width - x - 1, y) + image.setRgbaUnsafe(image.width - x - 1, y, rgba1) + image.setRgbaUnsafe(x, y, rgba2) proc flipVertical*(image: Image) = ## Flips the image around the X axis. - for y in 0 ..< image.height: + let h = image.height div 2 + for y in 0 ..< h: for x in 0 ..< image.width: - let rgba = image.getRgbaUnsafe(x, y) - image.setRgbaUnsafe(x, image.height - y - 1, rgba) + let + rgba1 = image.getRgbaUnsafe(x, y) + rgba2 = image.getRgbaUnsafe(x, image.height - y - 1) + image.setRgbaUnsafe(x, image.height - y - 1, rgba1) + image.setRgbaUnsafe(x, y, rgba2) func lerp(a, b: Color, v: float32): Color {.inline.} = result.r = lerp(a.r, b.r, v) diff --git a/tests/images/flipped1.png b/tests/images/flipped1.png new file mode 100644 index 0000000000000000000000000000000000000000..2fa1421b35acf9df7154353f806e3d0916ec61b3 GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^sUXb31|&mjbk8#|Flu|cIEGX(zP)3})nFjNaIitX zUq4(#K0!5m2B)I$tmNOfj~VtE{;%(=J!5%o$L+bvjK%Q@9qk&9i^RJz@-9qs;bNl~Xnw)6Um@3fRv7xBWZ`ei08jq`zSOETd*%z%h8b`njxgN@xNA DBz;|K literal 0 HcmV?d00001 diff --git a/tests/images/flipped3.png b/tests/images/flipped3.png new file mode 100644 index 0000000000000000000000000000000000000000..344d92338d6420efc3c52d933efcadbf37860094 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^sUXb31|&mjbk8#|Fv@wlIEGX(zP-4Sv%x{Y^`NM< zy>|GU10M5?nC)*rdH44DnVo6VO8+J7Pv+5F#L_9G;x$3TkuHqCTBpj+$-MskJ9LWm w3Hc6+Y~GVS@5c2rRYgBokNd|d5$}aq=39F64^)+900WG{)78&qol`;+00R$jTmS$7 literal 0 HcmV?d00001 diff --git a/tests/test_flips.nim b/tests/test_flips.nim new file mode 100644 index 0000000..ae23dfb --- /dev/null +++ b/tests/test_flips.nim @@ -0,0 +1,16 @@ +import pixie, chroma, vmath + +block: + + var a = newImage(101, 101) + a.fill(rgba(255, 0, 0, 255)) + var b = newImage(50, 50) + b.fill(rgba(0, 255, 0, 255)) + + a.draw(b, vec2(0, 0)) + + a.writeFile("tests/images/flipped1.png") + a.flipVertical() + a.writeFile("tests/images/flipped2.png") + a.flipHorizontal() + a.writeFile("tests/images/flipped3.png")