Skip to content

Commit 6a3787f

Browse files
Editorial: clarify that putImageData does not perform memcpy
Make it clearer that putImage will convert from the source ImageData's color space and pixel format to the output bitmap's color space and pixel format. Also document the two separate putImageData methods as separate methods with a common algorithm, rather than a single method with optional parameters.
1 parent 7568930 commit 6a3787f

File tree

1 file changed

+53
-38
lines changed

1 file changed

+53
-38
lines changed

source

+53-38
Original file line numberDiff line numberDiff line change
@@ -65869,10 +65869,10 @@ interface mixin <dfn interface>CanvasDrawImage</dfn> {
6586965869
interface mixin <dfn interface>CanvasImageData</dfn> {
6587065870
// <span>pixel manipulation</span>
6587165871
<span>ImageData</span> <span data-x="dom-context-2d-createImageData">createImageData</span>([EnforceRange] long sw, [EnforceRange] long sh, optional <span>ImageDataSettings</span> settings = {});
65872-
<span>ImageData</span> <span data-x="dom-context-2d-createImageData-imagedata">createImageData</span>(<span>ImageData</span> imagedata);
65872+
<span>ImageData</span> <span data-x="dom-context-2d-createImageData-imagedata">createImageData</span>(<span>ImageData</span> imageData);
6587365873
<span>ImageData</span> <span data-x="dom-context-2d-getImageData">getImageData</span>([EnforceRange] long sx, [EnforceRange] long sy, [EnforceRange] long sw, [EnforceRange] long sh, optional <span>ImageDataSettings</span> settings = {});
65874-
undefined <span data-x="dom-context-2d-putImageData">putImageData</span>(<span>ImageData</span> imagedata, [EnforceRange] long dx, [EnforceRange] long dy);
65875-
undefined <span data-x="dom-context-2d-putImageData">putImageData</span>(<span>ImageData</span> imagedata, [EnforceRange] long dx, [EnforceRange] long dy, [EnforceRange] long dirtyX, [EnforceRange] long dirtyY, [EnforceRange] long dirtyWidth, [EnforceRange] long dirtyHeight);
65874+
undefined <span data-x="dom-context-2d-putImageData-short">putImageData</span>(<span>ImageData</span> imageData, [EnforceRange] long dx, [EnforceRange] long dy);
65875+
undefined <span data-x="dom-context-2d-putImageData">putImageData</span>(<span>ImageData</span> imageData, [EnforceRange] long dx, [EnforceRange] long dy, [EnforceRange] long dirtyX, [EnforceRange] long dirtyY, [EnforceRange] long dirtyWidth, [EnforceRange] long dirtyHeight);
6587665876
};
6587765877

6587865878
enum <dfn enum>CanvasLineCap</dfn> { "butt", "round", "square" };
@@ -70253,7 +70253,7 @@ try {
7025370253
<h6><dfn>Pixel manipulation</dfn></h6>
7025470254

7025570255
<dl class="domintro">
70256-
<dt><code data-x=""><var>imagedata</var> = new <span subdfn data-x="dom-imagedata">ImageData</span>(<var>sw</var>, <var>sh</var> [, <var>settings</var>])</code></dt>
70256+
<dt><code data-x=""><var>imageData</var> = new <span subdfn data-x="dom-imagedata">ImageData</span>(<var>sw</var>, <var>sh</var> [, <var>settings</var>])</code></dt>
7025770257
<dd>
7025870258
<p>Returns an <code>ImageData</code> object with the given dimensions and the color space
7025970259
indicated by <var>settings</var>. All the pixels in the returned object are <span>transparent
@@ -70263,7 +70263,7 @@ try {
7026370263
the width or height arguments are zero.</p>
7026470264
</dd>
7026570265

70266-
<dt><code data-x=""><var>imagedata</var> = new <span subdfn data-x="dom-imagedata-with-data">ImageData</span>(<var>data</var>, <var>sw</var> [, <var>sh</var> [, <var>settings</var> ] ])</code></dt>
70266+
<dt><code data-x=""><var>imageData</var> = new <span subdfn data-x="dom-imagedata-with-data">ImageData</span>(<var>data</var>, <var>sw</var> [, <var>sh</var> [, <var>settings</var> ] ])</code></dt>
7026770267
<dd>
7026870268
<p>Returns an <code>ImageData</code> object using the data provided in the <code
7026970269
data-x="idl-Uint8ClampedArray">Uint8ClampedArray</code> argument, interpreted using the given
@@ -70277,11 +70277,11 @@ try {
7027770277
data and dimensions can't be interpreted consistently, or if either dimension is zero.</p>
7027870278
</dd>
7027970279

70280-
<dt><code data-x=""><var>imagedata</var> = <var>context</var>.<span subdfn data-x="dom-context-2d-createImageData-imagedata">createImageData</span>(<var>imagedata</var>)</code></dt>
70280+
<dt><code data-x=""><var>imageData</var> = <var>context</var>.<span subdfn data-x="dom-context-2d-createImageData-imagedata">createImageData</span>(<var>imageData</var>)</code></dt>
7028170281
<dd><p>Returns an <code>ImageData</code> object with the same dimensions and color space as the
7028270282
argument. All the pixels in the returned object are <span>transparent black</span>.</p></dd>
7028370283

70284-
<dt><code data-x=""><var>imagedata</var> = <var>context</var>.<span subdfn data-x="dom-context-2d-createImageData">createImageData</span>(<var>sw</var>, <var>sh</var> [, <var>settings</var>])</code></dt>
70284+
<dt><code data-x=""><var>imageData</var> = <var>context</var>.<span subdfn data-x="dom-context-2d-createImageData">createImageData</span>(<var>sw</var>, <var>sh</var> [, <var>settings</var>])</code></dt>
7028570285
<dd>
7028670286
<p>Returns an <code>ImageData</code> object with the given dimensions. The color space of the
7028770287
returned object is the <span data-x="concept-canvas-color-space">color space</span> of
@@ -70292,7 +70292,7 @@ try {
7029270292
the width or height arguments are zero.</p>
7029370293
</dd>
7029470294

70295-
<dt><code data-x=""><var>imagedata</var> = <var>context</var>.<span subdfn data-x="dom-context-2d-getImageData">getImageData</span>(<var>sx</var>, <var>sy</var>, <var>sw</var>, <var>sh</var> [, <var>settings</var>])</code></dt>
70295+
<dt><code data-x=""><var>imageData</var> = <var>context</var>.<span subdfn data-x="dom-context-2d-getImageData">getImageData</span>(<var>sx</var>, <var>sy</var>, <var>sw</var>, <var>sh</var> [, <var>settings</var>])</code></dt>
7029670296
<dd>
7029770297
<p>Returns an <code>ImageData</code> object containing the image data for the given rectangle of
7029870298
the bitmap. The color space of the returned object is the <span
@@ -70303,19 +70303,19 @@ try {
7030370303
of the width or height arguments are zero.</p>
7030470304
</dd>
7030570305

70306-
<dt><code data-x=""><var>imagedata</var>.<span subdfn data-x="dom-imagedata-width">width</span></code></dt>
70307-
<dt><code data-x=""><var>imagedata</var>.<span subdfn data-x="dom-imagedata-height">height</span></code></dt>
70306+
<dt><code data-x=""><var>imageData</var>.<span subdfn data-x="dom-imagedata-width">width</span></code></dt>
70307+
<dt><code data-x=""><var>imageData</var>.<span subdfn data-x="dom-imagedata-height">height</span></code></dt>
7030870308
<dd><p>Returns the actual dimensions of the data in the <code>ImageData</code> object, in
7030970309
pixels.</p></dd>
7031070310

70311-
<dt><code data-x=""><var>imagedata</var>.<span subdfn data-x="dom-imagedata-data">data</span></code></dt>
70311+
<dt><code data-x=""><var>imageData</var>.<span subdfn data-x="dom-imagedata-data">data</span></code></dt>
7031270312
<dd><p>Returns the one-dimensional array containing the data in RGBA order, as integers in the
7031370313
range 0 to 255.</p></dd>
7031470314

70315-
<dt><code data-x=""><var>imagedata</var>.<span subdfn data-x="dom-imagedata-colorSpace">colorSpace</span></code></dt>
70315+
<dt><code data-x=""><var>imageData</var>.<span subdfn data-x="dom-imagedata-colorSpace">colorSpace</span></code></dt>
7031670316
<dd><p>Returns the color space of the pixels.</p></dd>
7031770317

70318-
<dt><code data-x=""><var>context</var>.<span subdfn data-x="dom-context-2d-putImageData">putImageData</span>(<var>imagedata</var>, <var>dx</var>, <var>dy</var> [, <var>dirtyX</var>, <var>dirtyY</var>, <var>dirtyWidth</var>, <var>dirtyHeight</var> ])</code></dt>
70318+
<dt><code data-x=""><var>context</var>.<span subdfn data-x="dom-context-2d-putImageData">putImageData</span>(<var>imageData</var>, <var>dx</var>, <var>dy</var> [, <var>dirtyX</var>, <var>dirtyY</var>, <var>dirtyWidth</var>, <var>dirtyHeight</var> ])</code></dt>
7031970319
<dd>
7032070320
<p>Paints the data from the given <code>ImageData</code> object onto the bitmap. If a dirty
7032170321
rectangle is provided, only the pixels from that rectangle are painted.</p>
@@ -70327,7 +70327,7 @@ try {
7032770327
blending, no shadows, etc.</p>
7032870328

7032970329
<p>Throws an <span>"<code>InvalidStateError</code>"</span> <code>DOMException</code> if the
70330-
<var>imagedata</var> object's <code data-x="dom-imagedata-data">data</code> attribute value's
70330+
<var>imageData</var> object's <code data-x="dom-imagedata-data">data</code> attribute value's
7033170331
[[ViewedArrayBuffer]] internal slot is detached.</p>
7033270332
</dd>
7033370333
</dl>
@@ -70412,18 +70412,18 @@ try {
7041270412
</ol>
7041370413

7041470414
<p>The <dfn method for="CanvasImageData"><code
70415-
data-x="dom-context-2d-createimagedata-imagedata">createImageData(<var>imagedata</var>)</code></dfn>
70415+
data-x="dom-context-2d-createimagedata-imagedata">createImageData(<var>imageData</var>)</code></dfn>
7041670416
method steps are:</p>
7041770417

7041870418
<ol>
7041970419
<li><p>Let <var>newImageData</var> be a <span>new</span> <code>ImageData</code> object.</p></li>
7042070420

7042170421
<li><p><span data-x="Initialize an ImageData object">Initialize</span> <var>newImageData</var>
70422-
given the value of <var>imagedata</var>'s <code data-x="dom-imagedata-width">width</code>
70423-
attribute, the value of <var>imagedata</var>'s <code data-x="dom-imagedata-height">height</code>
70422+
given the value of <var>imageData</var>'s <code data-x="dom-imagedata-width">width</code>
70423+
attribute, the value of <var>imageData</var>'s <code data-x="dom-imagedata-height">height</code>
7042470424
attribute, and <i><span
7042570425
data-x="initialize-imagedata-defaultcolorspace">defaultColorSpace</span></i> set to the value of
70426-
<var>imagedata</var>'s <code data-x="dom-imagedata-colorSpace">colorSpace</code> attribute.</p></li>
70426+
<var>imageData</var>'s <code data-x="dom-imagedata-colorSpace">colorSpace</code> attribute.</p></li>
7042770427

7042870428
<li><p>Initialize the image data of <var>newImageData</var> to <span>transparent
7042970429
black</span>.</p></li>
@@ -70567,19 +70567,32 @@ try {
7056770567
component.</p>
7056870568

7056970569
<p>The <dfn method for="CanvasImageData"><code
70570-
data-x="dom-context-2d-putImageData">putImageData()</code></dfn> method writes data from
70571-
<code>ImageData</code> structures back to the rendering context's <span>output bitmap</span>. Its
70572-
arguments are: <var>imagedata</var>, <var>dx</var>, <var>dy</var>, <var>dirtyX</var>,
70573-
<var>dirtyY</var>, <var>dirtyWidth</var>, and <var>dirtyHeight</var>.</p>
70570+
data-x="dom-context-2d-putImageData-short">putImageData(<var>imageData</var>,
70571+
<var>dx</var>, <var>dy</var>)</code></dfn> method steps are to
70572+
<span data-x="dom-context2d-putImageData-common">put pixels from an
70573+
<code>ImageData</code> onto a bitmap</span>, given
70574+
<var>imageData</var>, <span>this</span>'s <span>output bitmap</span>,
70575+
<var>dx</var>, <var>dy</var>, 0, 0,
70576+
<var>imageData</var>'s <code data-x="dom-imagedata-width">width</code>, and
70577+
<var>imageData</var>'s <code data-x="dom-imagedata-height">height</code>.</p>
7057470578

70575-
<p>When the last four arguments to this method are omitted, they must be assumed to have the
70576-
values 0, 0, the <code data-x="dom-imagedata-width">width</code> member of the <var>imagedata</var> structure, and the <code data-x="dom-imagedata-height">height</code>
70577-
member of the <var>imagedata</var> structure, respectively.</p>
70578-
70579-
<p>The method, when invoked, must act as follows:</p>
70580-
70581-
<ol>
70582-
<li><p>Let <var>buffer</var> be <var>imagedata</var>'s <code
70579+
<p>The <dfn method for="CanvasImageData"><code
70580+
data-x="dom-context-2d-putImageData">putImageData(<var>imageData</var>,
70581+
<var>dx</var>, <var>dy</var>, <var>dirtyX</var>, <var>dirtyY</var>,
70582+
<var>dirtyWidth</var>, <var>dirtyHeight</var>)</code></dfn> method steps are to
70583+
<span data-x="dom-context2d-putImageData-common">put pixels from an
70584+
<code>ImageData</code> onto a bitmap</span>, given
70585+
<var>imageData</var>, <span>this</span>'s <span>output bitmap</span>,
70586+
<var>dx</var>, <var>dy</var>, <var>dirtyX</var>, <var>dirtyY</var>,
70587+
<var>dirtyWidth</var>, and <var>dirtyHeight</var>.</p>
70588+
70589+
<p>To <dfn data-x="dom-context2d-putImageData-common">put pixels from an <code>ImageData</code>
70590+
onto a bitmap</dfn>, given an <code>ImageData</code> <var>imageData</var>,
70591+
an <span>output bitmap</span> <var>bitmap</var>, and numbers <var>dx</var>, <var>dy</var>,
70592+
<var>dirtyX</var>, <var>dirtyY</var>, <var>dirtyWidth</var>, and <var>dirtyHeight</var>:</p>
70593+
70594+
<ol>
70595+
<li><p>Let <var>buffer</var> be <var>imageData</var>'s <code
7058370596
data-x="dom-imagedata-data">data</code> attribute value's [[ViewedArrayBuffer]] internal
7058470597
slot.</p></li>
7058570598

@@ -70606,12 +70619,12 @@ try {
7060670619

7060770620
<li>
7060870621
<p>If <var>dirtyX</var>+<var>dirtyWidth</var> is greater than the <code
70609-
data-x="dom-imagedata-width">width</code> attribute of the <var>imagedata</var> argument, then
70622+
data-x="dom-imagedata-width">width</code> attribute of the <var>imageData</var> argument, then
7061070623
let <var>dirtyWidth</var> be the value of that <code data-x="dom-imagedata-width">width</code>
7061170624
attribute, minus the value of <var>dirtyX</var>.</p>
7061270625

7061370626
<p>If <var>dirtyY</var>+<var>dirtyHeight</var> is greater than the <code
70614-
data-x="dom-imagedata-height">height</code> attribute of the <var>imagedata</var> argument, then
70627+
data-x="dom-imagedata-height">height</code> attribute of the <var>imageData</var> argument, then
7061570628
let <var>dirtyHeight</var> be the value of that <code
7061670629
data-x="dom-imagedata-height">height</code> attribute, minus the value of <var>dirtyY</var>.</p>
7061770630
</li>
@@ -70625,12 +70638,14 @@ try {
7062570638
data-x=""><var>dirtyX</var>&nbsp;&le;&nbsp;<var>x</var>&nbsp;&lt;&nbsp;<span
7062670639
data-x=""><var>dirtyX</var>+<var>dirtyWidth</var></span></span> and <span
7062770640
data-x=""><var>dirtyY</var>&nbsp;&le;&nbsp;<var>y</var>&nbsp;&lt;&nbsp;<span
70628-
data-x=""><var>dirtyY</var>+<var>dirtyHeight</var></span></span>, copy the
70629-
four channels of the pixel with coordinate (<var>x</var>, <var>y</var>) in
70630-
the <var>imagedata</var> data structure's <span>Canvas Pixel
70631-
<code data-x="idl-ArrayBuffer">ArrayBuffer</code></span> to the pixel with coordinate (<span
70632-
data-x=""><var>dx</var>+<var>x</var></span>, <var>dy</var>+<var>y</var>)
70633-
in the rendering context's <span>output bitmap</span>.</p></li>
70641+
data-x=""><var>dirtyY</var>+<var>dirtyHeight</var></span></span>,
70642+
set the pixel with coordinate (<span data-x=""><var>dx</var>+<var>x</var></span>,
70643+
<var>dy</var>+<var>y</var>) in <var>bitmap</var> to the color of the pixel at coordinate
70644+
(<var>x</var>, <var>y</var>) in the <var>imageData</var> data structure's
70645+
<span>Canvas Pixel <code data-x="idl-ArrayBuffer">ArrayBuffer</code></span>,
70646+
converted from <var>imageData</var>'s <code data-x="dom-imagedata-colorSpace">colorSpace</code>
70647+
to the <span data-x="concept-canvas-color-space">color space</span> of <var>bitmap</var>
70648+
using <span>'relative-colorimetric'</span> rendering intent.</p></li>
7063470649
</ol>
7063570650

7063670651
<p class="note">Due to the lossy nature of converting between color spaces and converting to and

0 commit comments

Comments
 (0)