[whatwg] Canvas stroke alignment
Nick
nickstakenburg at home.nl
Fri Jul 23 09:14:04 PDT 2010
Nice, less math.
I think the outside alignment approach will only work on paths that have
a 100% opacity fill.
The off-screen rectangle approach could work with opacity but it has the
same problem with transparent pixels between the stroke and the fill as
you'd get with a custom path once it curves.
It would be nice if Canvas took care of stroke alignment so we can get
rid of the hacks and limitations those bring along.
--
Nick
Op 20-7-2010 19:36, David Flanagan schreef:
> Nick wrote:
>> Canvas would benefit from a way to set stroke alignment. With the
>> only available alignment being center, which is not very useful,
>> custom paths have to be drawn to mimic inside and outside stroke
>> alignment. That workaround may give unwanted transparency on pixels
>> between a path and its stroke path once a path goes diagonal or curves.
>>
>> Having Canvas take care of stroke alignment (center, inside and
>> outside) by adding something like strokeAlign can fix these
>> transparency problems and makes adding strokes a lot easier and more
>> useful.
>>
>> --
>> Nick Stakenburg
>>
>
> Currently for inside alignment, I think you can do this, with no
> computation of custom path:
>
> c.save();
> c.clip();
> c.lineWidth *= 2;
> c.stroke();
> c.restore();
>
> Outside alignment is easy if you're also going to fill the path, of
> course. But if you want to leave the inside of the path untouched you
> could do something like this, I think:
>
> var url = canvas.toDataURL(); // Back up canvas content
> var img = document.createElement("img");
> img.src = url;
> c.save();
> c.linewidth *= 2;
> c.stroke();
> c.clip();
> c.drawImage(img, 0, 0); // Restore original bitmap inside the path
> c.restore();
>
> You can't use getImageData()/putImageData() for this, since they
> ignore the clipping region.
>
> Another approach for outside stroke alignment, if you know the
> directionality of your path would be to turn the path inside out by
> drawing an off-screen rectangle around the canvas in the opposite
> direction. Then the outside of your path becomes the inside of the
> new path and you can use the technique above for inside alignment...
>
> David
>
More information about the whatwg
mailing list