Skip to content

Commit

Permalink
putImageData: Clarify that the operation is not a memcpy
Browse files Browse the repository at this point in the history
Ensure that it be clear 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.
  • Loading branch information
ccameron-chromium committed Feb 19, 2025
1 parent 8213584 commit 3086f9a
Showing 1 changed file with 34 additions and 15 deletions.
49 changes: 34 additions & 15 deletions source
Original file line number Diff line number Diff line change
Expand Up @@ -65536,7 +65536,7 @@ interface mixin <dfn interface>CanvasImageData</dfn> {
<span>ImageData</span> <span data-x="dom-context-2d-createImageData">createImageData</span>([EnforceRange] long sw, [EnforceRange] long sh, optional <span>ImageDataSettings</span> settings = {});
<span>ImageData</span> <span data-x="dom-context-2d-createImageData-imagedata">createImageData</span>(<span>ImageData</span> imagedata);
<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 = {});
undefined <span data-x="dom-context-2d-putImageData">putImageData</span>(<span>ImageData</span> imagedata, [EnforceRange] long dx, [EnforceRange] long dy);
undefined <span data-x="dom-context-2d-putImageData-short">putImageData</span>(<span>ImageData</span> imagedata, [EnforceRange] long dx, [EnforceRange] long dy);
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);
};

Expand Down Expand Up @@ -70232,16 +70232,33 @@ try {
component.</p>

<p>The <dfn method for="CanvasImageData"><code
data-x="dom-context-2d-putImageData">putImageData()</code></dfn> method writes data from
<code>ImageData</code> structures back to the rendering context's <span>output bitmap</span>. Its
arguments are: <var>imagedata</var>, <var>dx</var>, <var>dy</var>, <var>dirtyX</var>,
<var>dirtyY</var>, <var>dirtyWidth</var>, and <var>dirtyHeight</var>.</p>
data-x="dom-context-2d-putImageData-short">putImageData(<var>imagedata</var>,
<var>dx</var>, <var>dy</var>)</code></dfn> method will
<span data-x="dom-context2d-putImageData-common">put pixels from an
<code>ImageData</code> onto an <span>output bitmap</span></span>
with <var>bitmap</var> set to the output bitmap of the rendering context,
<var>dirtyX</var> and <var>dirtyY</var> set to zero,
<var>dirtyWidth</var> and <var>dirtyHeight</var> set to the
<code data-x="dom-imagedata-width">width</code> and
<code data-x="dom-imagedata-width">height</code> members
of the <var>imagedata</var> structure respectively, and
<var>imagedata</var>, <var>dx</var>, and <var>dy</var>
as specified.</p>

<p>When the last four arguments to this method are omitted, they must be assumed to have the
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>
member of the <var>imagedata</var> structure, respectively.</p>
<p>The <dfn method for="CanvasImageData"><code
data-x="dom-context-2d-putImageData">putImageData(<var>imagedata</var>,
<var>dx</var>, <var>dy</var>, <var>dirtyX</var>, <var>dirtyY</var>,
<var>dirtyWidth</var>, <var>dirtyHeight</var>)</code></dfn> method will
<span data-x="dom-context2d-putImageData-common">put pixels from an
<code>ImageData</code> onto an <span>output bitmap</span></span>
with <var>bitmap</var> set to the output bitmap of the rendering context, and
<var>imagedata</var>, <var>dx</var>, <var>dy</var>, <var>dirtyX</var>, <var>dirtyY</var>, <var>dirtyWidth</var>, and <var>dirtyHeight</var>
as specified.</p>

<p>The method, when invoked, must act as follows:</p>
<p>To <dfn data-x="dom-context2d-putImageData-common">put pixels from an <code>ImageData</code>
onto an output bitmap</dfn>, given an <code>ImageData</code> <var>imagedata</var>,
an <span>output bitmap</span> <var>bitmap</var>, and numbers <var>dx</var>, <var>dy</var>,
<var>dirtyX</var>, <var>dirtyY</var>, <var>dirthyWidth</var>, and <var>dirthyHeight</var>:</p>

<ol>
<li><p>Let <var>buffer</var> be <var>imagedata</var>'s <code
Expand Down Expand Up @@ -70290,12 +70307,14 @@ try {
data-x=""><var>dirtyX</var>&nbsp;&le;&nbsp;<var>x</var>&nbsp;&lt;&nbsp;<span
data-x=""><var>dirtyX</var>+<var>dirtyWidth</var></span></span> and <span
data-x=""><var>dirtyY</var>&nbsp;&le;&nbsp;<var>y</var>&nbsp;&lt;&nbsp;<span
data-x=""><var>dirtyY</var>+<var>dirtyHeight</var></span></span>, copy the
four channels of the pixel with coordinate (<var>x</var>, <var>y</var>) in
the <var>imagedata</var> data structure's <span>Canvas Pixel
<code data-x="idl-ArrayBuffer">ArrayBuffer</code></span> to the pixel with coordinate (<span
data-x=""><var>dx</var>+<var>x</var></span>, <var>dy</var>+<var>y</var>)
in the rendering context's <span>output bitmap</span>.</p></li>
data-x=""><var>dirtyY</var>+<var>dirtyHeight</var></span></span>,
set the pixel with coordinate (<span data-x=""><var>dx</var>+<var>x</var></span>,
<var>dy</var>+<var>y</var>) in <var>bitmap</var> to the color at coordinate
(<var>x</var>, <var>y</var>) in the <var>imagedata</var> data structure's
<span>Canvas Pixel <code data-x="idl-ArrayBuffer">ArrayBuffer</code></span>,
converted from <var>imageData</var>'s <code data-x="dom-imagedata-colorSpace">colorSpace</code>
to the <span data-x="concept-canvas-color-space">color space</span> of <var>bitmap</var>
using <span>'relative-colorimetric'</span> rendering intent.</p></li>
</ol>

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

0 comments on commit 3086f9a

Please sign in to comment.