[whatwg] proposed canvas 2d API additions

Ian Hickson ian at hixie.ch
Wed Apr 26 12:37:08 PDT 2006

On Mon, 24 Apr 2006, Vladimir Vukicevic wrote:
> The use case that I'm thinking of is essentially:
> pixels = c.getPixels(x, y, width, height);
> /* manipulate pixels here */
> c.putPixels(pixels, x, y, width, height);
> That is, direct pixel manipulation, for performing some operation that
> can't be done using the context API.

Ok. That is helpful, because there have been several use cases thrown 
about and it wasn't clear to me which use case we actually cared about.

It seems to me that a critical requirement of the use case you describe is 
that the result of the following script:

   pixels = c.getPixels(x, y, width, height);
   /* do nothing here */
   c.putPixels(pixels, x, y, width, height);

...be a (possibly expensive) no-op. That is, you should not lose image 
data -- the above should not corrupt your picture. This means the pixel 
data returned must be native resolution data.

How about:

   interface ImageData {
     readonly attribute long int width;
     readonly attribute long int height;
     readonly attribute Array data;

   ImageData getImageData(in float x, in float y, in float w, in float h);
   void drawImageData(in float x, in float y, in ImageData d);

...where getImageData() returns an object implementing the ImageData 
interface which contains the actual pixel data for the backing store of 
the canvas, with the width and height attributes giving the number of 
actual data pixels returned? The array would contain, as in your proposal, 
4*width*height values, giving the R, G, B, and A components of each pixel 
in the image, row by row.

In the ECMAScript binding we could make the ImageData object have the 
"data" field as its default so it could be dereferenced directly as if the 
ImageData object itself were the array.

Ian Hickson               U+1047E                )\._.,--....,'``.    fL
http://ln.hixie.ch/       U+263A                /,   _.. \   _\  ;`._ ,.
Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'

More information about the whatwg mailing list