Would it be good to elaborate somewhere on the difference between premultiplied and non-premultiplied alpha?
I think so, unless canvas experts think the normative text is obviously interoperably implementable. (The normative text appears to be "Pixel
values must be, or must have already been, premultiplied by alpha if options's
premultiplied is true. Otherwise, they must not be premultiplied by alpha.", which to me seems pretty ambiguous. How do I know if the pixels are already premultiplied? What is "alpha"?)
Should I create two options dictionaries, GetImageDataOptions and ImageDataOptions, or does just one suffice for now?
Just one seems fine for now!
Would it make more sense to expose premultiplied as its own unique option there, and make it read more like:
I tend toward "yes". Then the dictionary type only shows up in the public API. This is just a style thing though; it's fine to pass the dictionary through the layers as you've currently done.
Some colors are only representable if the canvas' backing buffer is premultiplied. Should a premultiplied backing buffer be a spec requirement, or should it be left to the implementations to decide?
I don't have the canvas expertise to answer this question, but in general, if there are potential interop problems caused by leaving things to implementations, then we should not leave things to implementations. (But, my lack of expertise prevents me from knowing whether there would be interop problems from this.)