[whatwg] proposed canvas 2d API additions

David Hyatt hyatt at apple.com
Sat Apr 22 18:24:49 PDT 2006

This mail showed up pointlessly out of order. I see Ian already  
responded. :)


On Apr 22, 2006, at 6:15 PM, David Hyatt wrote:

> The getPixels proposal seems broken to me in that it does not take  
> into account high DPI, i.e., a situation where the canvas pixel  
> space has been scaled and a more detailed image is possibly  
> rendering within a region of the canvas.  In this situation, a  
> "canvas pixel" could actually be a bunch of device pixels that  
> contain different color information.
> dave
> (hyatt at apple.com)
> On Apr 21, 2006, at 12:10 PM, Vladimir Vukicevic wrote:
>> Hi folks,
>> I'd like to suggest extending the HTML canvas 2d context with a few
>> additions.  These are variations on some of the methods added to
>> Opera's "opera-2dgame" context.  The methods are intended to give
>> content authors direct pixel access to the canvas, as well as provide
>> some basic point-in-path testing functionality.
>>     float [] getPixels (in integer x, in integer y, in integer width,
>> in integer height);
>> Returns an array of floats representing the color values in the  
>> region
>> of pixels in the canvas whose upper left corner is at (x,y) and which
>> extends for width,height pixels.  These coordinates are in canvas
>> pixel space (that is, the same space that the canvas width and height
>> attributes are specified in).  The color values for each pixel are
>> returned as 4 floats, each in the range of 0.0 to 1.0, in R,G,B,A
>> order.  That is, given the paramters (0,0,2,2), the returned array
>> will be [R00 G00 B00 A00 R10 G10 B10 A10 R01 G01 B01 A01 R11 B11 G11
>> A11].
>> Note: we could return the pixels as integers in the range of 0..255,
>> as 8-bit color is most likely what canvases will be dealing with.
>> However, using floats allow us to easily extend into a 16-bit
>> colorspace without any API changes.  In addition, any computation
>> using these pixels is often done in normalized colors, so the  
>> division
>> by 255 would need to happen anyway.
>>     void putPixels (in float [] pixels, in integer x, in integer  
>> y, in
>> integer width, in integer height);
>> Does the opposite of getPixels; the given array must be exactly width
>> * height * 4 elements in length.  The values are to be clamped to
>> 0.0..1.0.
>>     boolean pointInPathFill(in float x, in float y);
>> pointInPathFill returns true if the given point would be inside the
>> region filled by the current path, and false otherwise.  The x,y
>> coordinates are in the current space of the canvas; that is, they are
>> transformed by the CTM and do not necessarily map directly to pixels.
>> I'd suggest that these three functions be added directly to the "2d"
>> context; content authors can test for their presence by checking the
>> function is not null on the 2d context object.  We might want a more
>> comprehensive way of letting authors test whether particular features
>> are supported, e.g. "shadows", "pixel-access", etc, but maybe it's  
>> not
>> necessary.
>> How's this sound?
>>     - Vlad

More information about the whatwg mailing list