commit
e198e521d6
3 changed files with 22 additions and 9 deletions
|
@ -309,12 +309,7 @@ proc drawCorrect(
|
||||||
else: # b is a Mask
|
else: # b is a Mask
|
||||||
validateMaskBlendMode()
|
validateMaskBlendMode()
|
||||||
else: # a is a Mask
|
else: # a is a Mask
|
||||||
when type(b) is Image:
|
when type(b) is Mask:
|
||||||
raise newException(
|
|
||||||
PixieError,
|
|
||||||
"Drawing an image onto a mask is not supported yet"
|
|
||||||
)
|
|
||||||
else: # b is a Mask
|
|
||||||
validateMaskBlendMode()
|
validateMaskBlendMode()
|
||||||
|
|
||||||
var
|
var
|
||||||
|
@ -355,9 +350,11 @@ proc drawCorrect(
|
||||||
)
|
)
|
||||||
a.setRgbaUnsafe(x, y, blended)
|
a.setRgbaUnsafe(x, y, blended)
|
||||||
else: # a is a Mask, b must be a mask
|
else: # a is a Mask, b must be a mask
|
||||||
let
|
let value = a.getValueUnsafe(x, y)
|
||||||
value = a.getValueUnsafe(x, y)
|
when type(b) is Image:
|
||||||
sample = b.getValueSmooth(xFloat, yFloat).uint32
|
let sample = b.getRgbaSmooth(xFloat, yFloat).a.uint32
|
||||||
|
else: # a is a Mask
|
||||||
|
let sample = b.getValueSmooth(xFloat, yFloat).uint32
|
||||||
a.setValueUnsafe(x, y, ((value * sample) div 255).uint8)
|
a.setValueUnsafe(x, y, ((value * sample) div 255).uint8)
|
||||||
|
|
||||||
proc draw*(image: Image, mask: Mask, mat: Mat3, blendMode = bmMask) =
|
proc draw*(image: Image, mask: Mask, mat: Mat3, blendMode = bmMask) =
|
||||||
|
@ -371,6 +368,9 @@ proc draw*(
|
||||||
proc draw*(a, b: Mask, mat = mat3(), blendMode = bmMask) =
|
proc draw*(a, b: Mask, mat = mat3(), blendMode = bmMask) =
|
||||||
a.drawCorrect(b, mat, blendMode)
|
a.drawCorrect(b, mat, blendMode)
|
||||||
|
|
||||||
|
proc draw*(mask: Mask, image: Image, mat = mat3(), blendMode = bmMask) =
|
||||||
|
mask.drawCorrect(image, mat, blendMode)
|
||||||
|
|
||||||
when defined(release):
|
when defined(release):
|
||||||
{.pop.}
|
{.pop.}
|
||||||
|
|
||||||
|
|
BIN
tests/images/masks/imageMaskedMask.png
Normal file
BIN
tests/images/masks/imageMaskedMask.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 885 B |
|
@ -48,3 +48,16 @@ block:
|
||||||
|
|
||||||
a.draw(b)
|
a.draw(b)
|
||||||
writeFile("tests/images/masks/maskedMask.png", a.encodePng())
|
writeFile("tests/images/masks/maskedMask.png", a.encodePng())
|
||||||
|
|
||||||
|
block:
|
||||||
|
let a = newMask(100, 100)
|
||||||
|
a.fill(255)
|
||||||
|
|
||||||
|
var path: Path
|
||||||
|
path.ellipse(a.width / 2, a.height / 2, 25, 25)
|
||||||
|
|
||||||
|
let b = newImage(a.width, a.height)
|
||||||
|
b.fillPath(path, rgba(0, 0, 0, 255))
|
||||||
|
|
||||||
|
a.draw(b)
|
||||||
|
writeFile("tests/images/masks/imageMaskedMask.png", a.encodePng())
|
||||||
|
|
Loading…
Reference in a new issue