Jump to content

Recommended Posts

When attempting to draw shapes with a brush and then fill them in with a color, such as when doing ink-and-paint, you need a tool that will properly "re-fill" the partial alpha pixels on the interior edges of the brushstroke.  Photoshop et al typically have an option for this on the paintbucket, such as "Antialias" or something similar.  I could find no similar feature in Affinity Photo, which makes it kind of impossible to use for ink-and-paint, since just flooding in the solid color regions would have to be done manually by the artist instead of being a single click.

- Casey

Share this post


Link to post
Share on other sites

It is called Tolerance and it is on the Context Toolbar. Higher levels fill more semitransparent areas.

765935781_ScreenShot2019-06-27at3_18_42PM.png.32cd71010d1d1b526cb10f3d7ade4841.png


MacBook Pro (13-inch, Mid 2012) Mac OS 10.12.6 || Mac Pro (Late 2013) Mac OS 10.14.5

Affinity Designer 1.7.2 | Affinity Photo 1.7.2 | Affinity Publisher 1.7.2 | Affinity Designer Beta 1.7.2.2 | Affinity Photo Beta 1.7.2.151 | Affinity Publisher Beta 1.7.2.458

Share this post


Link to post
Share on other sites

Neither of those two things is what I'm talking about.  Tolerance does not properly handle antialiased edges, it simply expands the region that will be filled (thus destroying the antialiasing).  As for the paintbrush options, those do not affect the paint bucket, do they?

- Casey

 

Share this post


Link to post
Share on other sites
8 hours ago, Casey Muratori said:

Tolerance does not properly handle antialiased edges, it simply expands the region that will be filled (thus destroying the antialiasing).

Okay, I really don't understand what it is you want to achieve.

I drew an enclosed area with a brush and black ink. I chose the paint bucket tool and filled it with blue paint and then dumped it into the enclosed area, one click with the Paintbucket tool. You can see the result, if is this not what you want then what is what you want.

1940708657_ScreenShot2019-06-28at7_51_48AM.png.9bf3cc60bb08a338f26c038246ae954a.png


MacBook Pro (13-inch, Mid 2012) Mac OS 10.12.6 || Mac Pro (Late 2013) Mac OS 10.14.5

Affinity Designer 1.7.2 | Affinity Photo 1.7.2 | Affinity Publisher 1.7.2 | Affinity Designer Beta 1.7.2.2 | Affinity Photo Beta 1.7.2.151 | Affinity Publisher Beta 1.7.2.458

Share this post


Link to post
Share on other sites

In your example image there are semi transparent pixels all around the area that you filled with the turquoise colour.

I believe the OP would like the fill to merge seamlessly with the surrounding colour without leaving translucent pixels.

Update: Hmm - OK I am confused too! Increasing the Tolerance will eventually colour right up to the line (as it were) leaving no translucent pixels, and it seems to me to preserve the existing anti-aliasing too.

Just looked at an old version of Photoshop, and to me is seems that anti-aliasing turned on gives a very similar result to Affinity.

Turning anti-aliasing off gives a hard edge, and destroys existing anti-aliasing on the outline.


Win7 Ultimate x64   |   i5-3570K @ 3.4GHz   |   16 GB RAM   |   120 GB SSD   |   nVidia GTX 660 Ti   |   Huion 1060 Plus

How I make GIFs >>> ScreenToGIF (Windows only, Open Source, Portable, ~600kB)

Share this post


Link to post
Share on other sites
32 minutes ago, Aammppaa said:

I believe the OP would like the fill to ...

I am going to wait for Casey to reply and not speculate.


MacBook Pro (13-inch, Mid 2012) Mac OS 10.12.6 || Mac Pro (Late 2013) Mac OS 10.14.5

Affinity Designer 1.7.2 | Affinity Photo 1.7.2 | Affinity Publisher 1.7.2 | Affinity Designer Beta 1.7.2.2 | Affinity Photo Beta 1.7.2.151 | Affinity Publisher Beta 1.7.2.458

Share this post


Link to post
Share on other sites

I'm not sure exactly how to explain what is supposed to happen verbally, but mathematically you have a pixel of the form (color, alpha) where "color" is a vector (RGB, CMYK, whatever your encoding is) and "alpha" is an encoding of the range [0, 1] that (in this case) represents brush coverage of the pixel that was painted by a previous brush stroke.  An "alpha-aware fill" or "anti-aliased fill" is one where _all reachable pixels_ in the flood region with an alpha less than 1 have their original value of (color, alpha) replaced with (alpha*color + (1 - alpha)*fill, 1), where "fill" is the color with which you've filled the region.

Another way to say this is that an alpha-aware fill behaves as if you had filled the underlying region first, _and then_ painted the brush stroke over it.

No "tolerance" value is needed in this scenario - a tolerance of 0 will still fill the region exactly correctly, because you are not asking it to expand to any neighboring colors.  You are literally only filling exact matches for the _color_ part of the component, you're just extending into pixels whose alpha was partial.

Not sure how to describe this any other way, but I can post code for it if the devs really don't know what I'm talking about, but would assume any graphics programmer would immediately understand what I'm saying.

- Casey 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×