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 0000000..2fa1421 Binary files /dev/null and b/tests/images/flipped1.png differ diff --git a/tests/images/flipped2.png b/tests/images/flipped2.png new file mode 100644 index 0000000..442446e Binary files /dev/null and b/tests/images/flipped2.png differ diff --git a/tests/images/flipped3.png b/tests/images/flipped3.png new file mode 100644 index 0000000..344d923 Binary files /dev/null and b/tests/images/flipped3.png differ 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")