faster subImage, a bit more

This commit is contained in:
Ryan Oldenburg 2021-01-23 14:17:28 -06:00
parent 45da7c4db9
commit 007b495538
3 changed files with 20 additions and 93 deletions

View file

@ -127,8 +127,11 @@ proc subImage*(image: Image, x, y, w, h: int): Image =
result = newImage(w, h)
for y2 in 0 ..< h:
for x2 in 0 ..< w:
result.setRgbaUnsafe(x2, y2, image[x2 + x, y2 + y])
copyMem(
result.data[result.dataIndex(0, y2)].addr,
image.data[image.dataIndex(x, y + y2)].addr,
w * 4
)
proc minifyBy2*(image: Image): Image =
## Scales the image down by an integer scale.

View file

@ -1,4 +1,4 @@
import chroma, pixie, benchy, system/memory
import chroma, pixie, benchy
let a = newImage(2560, 1440)
@ -12,6 +12,9 @@ timeIt "fill_rgba":
doAssert a[0, 0] == rgba(63, 127, 191, 255)
keep(a)
timeIt "subImage":
keep a.subImage(0, 0, 256, 256)
timeIt "invert":
a.invert()
keep(a)

View file

@ -1,112 +1,33 @@
import pixie, chroma, strutils, os, vmath
proc writeAndCheck(image: Image, fileName: string) =
image.writeFile(fileName)
let masterFileName = fileName.replace("tests/images/", "tests/images/masters/")
if not fileExists(masterFileName):
echo "Master file: " & masterFileName & " not found!"
quit(-1)
var master = readImage(fileName)
assert image.width == master.width
assert image.height == master.height
assert image.data == master.data
# block:
# var a = newImage(100, 100)
# a.fill(rgba(0, 0, 0, 0))
# var b = newImage(50, 50)
# b.fill(rgba(255, 92, 0, 255))
# var c = a.drawBlendSmooth(
# b,
# translate(vec2(50, 50)) * rotationMat3(0.2789281382) * translate(vec2(-25, -25)),
# bmNormal
# )
# c.writeAndCheck("tests/images/centerRotation.png")
# block:
# var a = newImage(100, 100)
# a.fill(rgba(255, 255, 255, 255))
# var b = newImage(50, 50)
# b.fill(rgba(255, 92, 0, 255))
# var c = a.drawBlendSmooth(
# b,
# translate(vec2(50, 50)) * rotationMat3(0.2789281382) * translate(vec2(-25, -25)),
# bmNormal
# )
# c.writeAndCheck("tests/images/centerRotationWhite.png")
# block:
# var a = newImage(100, 100)
# a.fill(rgba(0, 0, 0, 0))
# var b = newImage(50, 50)
# b.fill(rgba(255, 92, 0, 255))
# var c = a.drawBlendSmooth(
# b,
# translate(vec2(50, 50)) * rotationMat3(0.2789281382) * translate(vec2(-25, -25)),
# bmNormal
# )
# c.writeAndCheck("tests/images/transCompose.c.png")
# var d = newImage(100, 100)
# d = d.fill(rgba(255, 255, 255, 255))
# var e = d.draw(c)
# e.writeAndCheck("tests/images/transCompose.png")
import pixie, chroma, vmath
block:
var image = newImage(10, 10)
let image = newImage(10, 10)
image[0, 0] = rgba(255, 255, 255, 255)
doAssert image[0, 0] == rgba(255, 255, 255, 255)
block:
var image = newImage(10, 10)
let image = newImage(10, 10)
image.fill(rgba(255, 0, 0, 255))
doAssert image[0, 0] == rgba(255, 0, 0, 255)
block:
var image = newImage(10, 10)
let
image = newImage(256, 256)
subImage = image.subImage(0, 0, 128, 128)
doAssert subImage.width == 128 and subImage.height == 128
block:
let image = newImage(10, 10)
image.fill(rgba(255, 0, 0, 128))
image.toAlphy()
doAssert image[9, 9] == rgba(128, 0, 0, 128)
block:
var image = newImage(10, 10)
let image = newImage(10, 10)
image.fill(rgba(128, 0, 0, 128))
image.fromAlphy()
doAssert image[9, 9] == rgba(255, 0, 0, 128)
# block:
# var a = newImage(100, 100)
# a.fill(rgba(255, 0, 0, 255))
# var b = newImage(100, 100)
# b.fill(rgba(0, 255, 0, 255))
# var c = a.drawOverwrite(b, translate(vec2(25, 25)))
# c.writeAndCheck("tests/images/drawOverwrite.png")
# block:
# var a = newImage(100, 100)
# a.fill(rgba(255, 0, 0, 255))
# var b = newImage(100, 100)
# b.fill(rgba(0, 255, 0, 255))
# var c = a.draw(b, translate(vec2(25, 25)), bmOverwrite)
# c.writeAndCheck("tests/images/drawBlend.png")
# block:
# var a = newImage(100, 100)
# a.fill(rgba(255, 0, 0, 255))
# var b = newImage(100, 100)
# b.fill(rgba(0, 255, 0, 255))
# var c = a.draw(b, translate(vec2(25.15, 25.15)), bmOverwrite)
# c.writeAndCheck("tests/images/drawBlendSmooth.png")
# block:
# var a = newImage(100, 100)
# a.fill(rgba(255, 0, 0, 255))
# var b = newImage(100, 100)
# b.fill(rgba(0, 255, 0, 255))
# var c = a.draw(b, translate(vec2(25, 25)) * rotationMat3(PI/2))
# c.writeAndCheck("tests/images/drawOverwriteRot.png")
block:
let
a = newImage(101, 101)