RE: proposal: Add support for masking to canvas

Rik,

I personally like the dictionary option for that number of arguments. I like proposal you mentioned on this thread: http://lists.w3.org/Archives/Public/public-canvas-api/2013JanMar/0032.html.

Thanks,
Jatinder

From: Rik Cabanier [mailto:cabanier@gmail.com]
Sent: Tuesday, January 29, 2013 7:30 PM
To: Jatinder Mann
Cc: public-canvas-api@w3.org; whatwg
Subject: Re: proposal: Add support for masking to canvas

Jatinder,

I forgot to ask what you think of the API itself.
Do you believe it's OK to have 12 arguments or would a dictionary be better?

Rik

On Tue, Jan 29, 2013 at 5:34 PM, Jatinder Mann <jmann@microsoft.com<mailto:jmann@microsoft.com>> wrote:
Seeing that alpha and luminance masking is definitely useful, I would like to see them added to the spec.

We may want to ensure that the spec provides a very clear mathematical definition of luma. Luma, luminance, and luminosity are technically different things. One specific feedback is whether the spec will be specifying if user agents should assume linear gamma space or 2.2 gamma space. Basically all images are natively stored in 2.2. gamma space, but luminance is typically calculated assuming linear gamma. I believe 2.2 gamma would be faster, as there is no need for the conversion.

Thanks,
Jatinder

From: Rik Cabanier [mailto:cabanier@gmail.com<mailto:cabanier@gmail.com>]
Sent: Thursday, January 24, 2013 1:42 PM
To: public-canvas-api@w3.org<mailto:public-canvas-api@w3.org>; whatwg@whatwg.org<mailto:whatwg@whatwg.org>
Subject: proposal: Add support for masking to canvas

All,

the canvas API does not have a convenient way of supporting masking today.
There is some support with the compositing operators but it requires quite a bit of work on the author's part as well as a temporary canvas. In addition, there is no way to implement a luminosity mask without reading the pixels and doing the math yourself.

I was thinking of proposing the following new API calls for the 2d canvas context:
enum CanvasMaskType { luminosity, alpha};
void maskImage(image, sx, sy, sw, sh, dx, dy, dw, dh, maskType, invert, clipToMask);
void resetMask();

'maskImage' will set the mask in the current graphics state which makes it subject to save/restore. parameters:
image = HTMLImageElement or HTMLCanvasElement or HTMLVideoElement.
Points to set of pixels that will be used as the mask source

sx, sy, etc = describes what portions of the source and destination canvas to target. (This is similar to drawImage [1])

maskType = sets what type of mask.
luminosity = (default) use the luma value of the pixel
alpha = just look at the alpha channel. ignore the color channel
invert = boolean. (default = false) invert the mask values

clipToMask = boolean (default = true) the area outside of the mask pixels clipped away. If false, that area is not affected by the mask.

'maskImage' will set the mask in the current graphics state which makes it subject to save/restore.

'resetMask' will remove the mask from the current graphics state.

Some people told me that maskImage is taking too many parameters and that a dictionary would be better.

What do people think? Is this useful enough to add to the API?

Rik

1: http://www.w3.org/html/wg/drafts/2dcontext/html5_canvas/#dom-context-2d-drawimage

Received on Thursday, 31 January 2013 19:05:56 UTC