import chroma, pixie, pixie/internal, vmath, xrays block: let image = newImage(10, 10) image[0, 0] = rgba(255, 255, 255, 255) doAssert image[0, 0] == rgba(255, 255, 255, 255) block: let image = newImage(10, 10) image.fill(rgba(255, 0, 0, 255)) doAssert image[0, 0] == rgba(255, 0, 0, 255) block: 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.data.toPremultipliedAlpha() doAssert image[9, 9] == rgba(128, 0, 0, 128) block: var data = newSeq[ColorRGBX](100) fillUnsafe(data, rgbx(100, 0, 0, 128), 0, data.len) data.toStraightAlpha() doAssert data[10] == rgbx(199, 0, 0, 128) block: let image = newImage(100, 100) image.fill(rgbx(200, 200, 200, 200)) image.applyOpacity(0.5) doAssert image[0, 0] == rgbx(100, 100, 100, 100) doAssert image[88, 88] == rgbx(100, 100, 100, 100) block: let a = newImage(101, 101) b = newImage(50, 50) a.fill(rgba(255, 0, 0, 255)) b.fill(rgba(0, 255, 0, 255)) a.draw(b) a.xray("tests/images/flipped1.png") a.flipVertical() a.xray("tests/images/flipped2.png") a.flipHorizontal() a.xray("tests/images/flipped3.png") block: let a = readImage("tests/images/flipped1.png") b = a.superImage(-10, 0, 20, 20) b.xray("tests/images/superimage1.png") block: let a = readImage("tests/images/flipped1.png") b = a.superImage(-10, -10, 20, 20) b.xray("tests/images/superimage2.png") block: let a = readImage("tests/images/flipped1.png") b = a.superImage(90, 0, 120, 120) b.xray("tests/images/superimage3.png") block: let a = readImage("tests/images/flipped1.png") b = a.superImage(90, 90, 120, 120) b.xray("tests/images/superimage4.png") block: let a = readImage("tests/images/flipped1.png") b = a.superImage(-10, -10, 120, 120) b.xray("tests/images/superimage5.png") block: let a = readImage("tests/images/flipped1.png") b = a.superImage(45, 45, 20, 20) b.xray("tests/images/superimage6.png") block: let a = readImage("tests/images/flipped1.png") b = a.minifyBy2() b.xray("tests/images/minifiedBy2.png") block: let a = readImage("tests/images/minifiedBy2.png") b = a.magnifyBy2() b.xray("tests/images/magnifiedBy2.png") block: let a = readImage("tests/images/flipped1.png") b = a.minifyBy2(2) b.xray("tests/images/minifiedBy4.png") block: let a = readImage("tests/images/minifiedBy4.png") b = a.magnifyBy2(2) b.xray("tests/images/magnifiedBy4.png") block: let a = readImage("tests/fileformats/png/mandrill.png") b = a.minifyBy2() b.xray("tests/images/minifiedMandrill.png") block: let a = newImage(100, 100) a.fill(rgbx(50, 100, 150, 200)) a.invert() doAssert a[0, 0] == rgbx(44, 33, 23, 55) block: let ctx = newContext(100, 100) ctx.fillStyle = rgba(255, 255, 255, 255) ctx.image.fill(rgba(0, 0, 0, 255)) ctx.fillRect(rect(25, 25, 50, 50), ) ctx.image.blur(20) ctx.image.xray("tests/images/imageblur20.png") block: let ctx = newContext(100, 100) ctx.fillStyle = rgba(255, 255, 255, 255) ctx.image.fill(rgba(0, 0, 0, 255)) ctx.fillRect(rect(25, 25, 50, 50)) ctx.image.blur(20, rgba(0, 0, 0, 255)) ctx.image.xray("tests/images/imageblur20oob.png") block: let image = newImage(100, 100) doAssert image.isOneColor() block: let image = newImage(100, 100) image.fill(rgba(255, 255, 255, 255)) doAssert image.isOneColor() block: let image = newImage(100, 100) image.fill(rgba(1, 2, 3, 4)) doAssert image.isOneColor() block: let image = newImage(100, 100) image[99, 99] = rgba(255, 255, 255, 255) doAssert not image.isOneColor() block: let image = newImage(100, 100) doAssert image.isTransparent() block: let image = newImage(100, 100) image.fill(rgba(255, 255, 255, 0)) doAssert image.isTransparent() block: let image = newImage(100, 100) image[99, 99] = rgba(255, 255, 255, 255) doAssert not image.isTransparent() block: let image = newImage(100, 100) image.fill(rgba(255, 255, 255, 255)) doAssert not image.isTransparent() block: let image = newImage(100, 100) image.fill(rgba(255, 255, 255, 255)) doAssert image.isOpaque() block: let image = newImage(100, 100) image.fill(rgba(255, 255, 255, 255)) image[9, 13] = rgbx(250, 250, 250, 250) doAssert not image.isOpaque() block: let a = newImage(400, 400) let b = newImage(156, 434) b.fill(rgba(255, 0, 0, 255)) a.draw( b, mat3( -0.5, -4.371138828673793e-008, 0.0, -4.371138828673793e-008, 0.5, 0.0, 292.0, 45.0, 1.0 ) ) block: var colors: seq[ColorRGBA] premultiplied: seq[ColorRGBX] for a in 0.uint8 .. 255: for r in 0.uint8 .. 255: let rgba = rgba(r, 0, 0, a) floats = rgba.color() premul = color(floats.r * floats.a, 0, 0, floats.a) rgbx = rgbx( round(premul.r * 255).uint8, 0, 0, round(premul.a * 255).uint8 ) colors.add(rgba) premultiplied.add(rgbx) var converted = cast[seq[ColorRGBX]](colors) toPremultipliedAlpha(converted) for i in 0 ..< premultiplied.len: doAssert premultiplied[i] == converted[i] doAssert colors[i].rgbx == converted[i] block: let image = newImage(100, 100) image.fill("white") doAssert image[10, 10] == rgba(255, 255, 255, 255) block: # opaqueBounds of fully transparent image. let image = newImage(100, 100) doAssert image.opaqueBounds() == rect(0, 0, 0, 0) block: # opaqueBounds of fully opaque image. let image = newImage(100, 100) image.fill(rgbx(255, 255, 255, 255)) doAssert image.opaqueBounds() == rect(0.0, 0.0, 100.0, 100.0) block: let image = newImage(100, 100) image.fillPath( """ M 20 60 A 40 40 90 0 1 100 60 A 40 40 90 0 1 180 60 Q 180 120 100 180 Q 20 120 20 60 z """, parseHtmlColor("#FC427B").rgba, scale(vec2(0.3, 0.3)) ) let rect = image.opaqueBounds() doAssert rect == rect(6.0, 6.0, 48.0, 48.0) let trimmedImage = image.subImage(rect) trimmedImage.xray("tests/images/opaqueBounds.png")