W3C home > Mailing lists > Public > whatwg@whatwg.org > February 2008

[whatwg] More random comments on the putImageData definition

From: Robert O'Callahan <robert@ocallahan.org>
Date: Mon, 11 Feb 2008 14:37:05 +1300
Message-ID: <11e306600802101737v5d831a0dgaa7be3297761d2a6@mail.gmail.com>
On Feb 11, 2008 12:51 PM, Oliver Hunt <oliver at apple.com> wrote:

>
>
> >  and the cost of sub-/super-sampling removes the whole "speed" thing
> > that the API was originally added for.
> >
>
> Not so sure about this. Script manipulation of pixel data probably isn't
> going to be faster than native, probably hardware-assisted resampling.
>
> Why would the sub/super sampling be done in a script?  one of the use
> cases for get/putImageData is applying filters to an image -- in that case
> you just process each pixel, no subsampling needed.
> The problem comes from things like
> http://jsmsxdemo.googlepages.com/jsmsx.html which are not using
> get/putImageData for image manipulation, but rather for just blitting to the
> screen.
>
> In terms of performance, a simple testcase a wrote a while ago (
> http://nerget.com/jstests/mandelbrot.html ) shows that putImageData is
> around 200x faster than the alternative of lots and lots of 1x1rect fills
> (at least in ffx), in real world terms that means you can easily get to the
> point that just filling the canvas takes longer than generating the data for
> the fill.
>

Sorry, I wasn't clear.

I'm just saying that the cost of resampling in getImageData/putImageData
would not be significant compared to the cost of script actually
manipulating the image data, so "performance" is not a compelling reason to
avoid such resampling.


>
> Yeah, unfortunately we all know the web authors tend to favour the "it
> > works now, so must be correct" philosophy -- it's looking more and more like
> > i will be forced to convert the canvas from hidpi to 1:1 the moment any of
> > the imagedata/toDataURL routines are used.  *sigh*
> >
>
> That would break your sensible invariant that
> putImageData(getImageData(x,y,w,h), x, y) leaves the canvas unchanged.
>
> But only the first time ther imagedata methods were touched, from that
> point on the canvas would be permanently locked at the 1:1 ratio, so it
> wouldn't result in a continual flip-flop between high and low resolution
> that would occur if you just sub/super-sampled on access.
>

Right, so it's not pessimal, but it's not great either. It may end up being
the best of a bad set of choices.


> It would really suck to lock canvas into a 1:1 device-to-CSS pixel ratio
> forever. Seems to me putImageData/getImageData isn't worth that risk. Maybe
> we should introduce it later when developers are more likely to encounter
> the DPI issues for themselves.
>
> I'm not sure what you mean here?
>

If, 5 years from now, most Web developers have 200dpi screens so browsers
are using at least a 2:1 ratio for their canvas backing stores, then
putImageData and getImageData could be safely introduced with the current
spec, because an assumption that device pixels are the same as canvas units
would break immediately in testing.

Rob
--
"He was pierced for our transgressions, he was crushed for our iniquities;
the punishment that brought us peace was upon him, and by his wounds we are
healed. We all, like sheep, have gone astray, each of us has turned to his
own way; and the LORD has laid on him the iniquity of us all." [Isaiah
53:5-6]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/attachments/20080211/cc8369c7/attachment.htm>
Received on Sunday, 10 February 2008 17:37:05 UTC

This archive was generated by hypermail 2.3.1 : Monday, 13 April 2015 23:08:39 UTC