Changeset 32878 in webkit


Ignore:
Timestamp:
May 5, 2008 11:26:17 AM (16 years ago)
Author:
hyatt@apple.com
Message:

WebCore:

2008-05-05 David Hyatt <hyatt@apple.com>

Fix for https://bugs.webkit.org/show_bug.cgi?id=18821. Fix some bugs in both get/PutImageData of <canvas>.

Reviewed by Eric

New tests added in fast/canvas/

  • platform/graphics/cg/ImageBufferCG.cpp: (WebCore::ImageBuffer::getImageData): (WebCore::ImageBuffer::putImageData):

LayoutTests:

2008-05-05 David Hyatt <hyatt@apple.com>

Fix for https://bugs.webkit.org/show_bug.cgi?id=18821, putImageData incorrect when data has alpha.

Reviewed by Eric

  • fast/canvas/canvas-alphaImageData-behavior-expected.txt: Added.
  • fast/canvas/canvas-alphaImageData-behavior.html: Added.
  • fast/canvas/canvas-alphaImageData-behavior.js: Added.
Location:
trunk
Files:
3 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r32873 r32878  
     12008-05-05  David Hyatt  <hyatt@apple.com>
     2
     3        Fix for https://bugs.webkit.org/show_bug.cgi?id=18821, putImageData incorrect when data has alpha.
     4
     5        Reviewed by Eric
     6
     7        * fast/canvas/canvas-alphaImageData-behavior-expected.txt: Added.
     8        * fast/canvas/canvas-alphaImageData-behavior.html: Added.
     9        * fast/canvas/canvas-alphaImageData-behavior.js: Added.
     10
    1112008-05-05  Dan Bernstein  <mitz@apple.com>
    212
  • trunk/WebCore/ChangeLog

    r32872 r32878  
     12008-05-05  David Hyatt  <hyatt@apple.com>
     2
     3        Fix for https://bugs.webkit.org/show_bug.cgi?id=18821.  Fix some bugs in both get/PutImageData of <canvas>.
     4
     5        Reviewed by Eric
     6
     7        New tests added in fast/canvas/
     8
     9        * platform/graphics/cg/ImageBufferCG.cpp:
     10        (WebCore::ImageBuffer::getImageData):
     11        (WebCore::ImageBuffer::putImageData):
     12
    1132008-05-05  Dan Bernstein  <mitz@apple.com>
    214
  • trunk/WebCore/platform/graphics/cg/ImageBufferCG.cpp

    r31935 r32878  
    150150            int basex = x * 4;
    151151            if (unsigned char alpha = srcRows[basex + 3]) {
    152                 destRows[0] = (srcRows[basex] * 255) / alpha;
    153                 destRows[1] = (srcRows[basex + 1] * 255) / alpha;
    154                 destRows[2] = (srcRows[basex + 2] * 255) / alpha;
    155                 destRows[3] = alpha;
     152                destRows[basex] = (srcRows[basex] * 255) / alpha;
     153                destRows[basex + 1] = (srcRows[basex + 1] * 255) / alpha;
     154                destRows[basex + 2] = (srcRows[basex + 2] * 255) / alpha;
     155                destRows[basex + 3] = alpha;
    156156            } else {
    157                 reinterpret_cast<uint32_t*>(destRows)[0] = reinterpret_cast<uint32_t*>(srcRows)[0];
     157                reinterpret_cast<uint32_t*>(destRows + basex)[0] = reinterpret_cast<uint32_t*>(srcRows + basex)[0];
    158158            }
    159             destRows += 4;
    160159        }
    161160        srcRows += srcBytesPerRow;
     161        destRows += destBytesPerRow;
    162162    }
    163163    return result;
     
    199199    for (int y = 0; y < numRows; ++y) {
    200200        for (int x = 0; x < numColumns; x++) {
    201             unsigned char alpha = srcRows[x * 4 + 3];
     201            int basex = x * 4;
     202            unsigned char alpha = srcRows[basex + 3];
    202203            if (alpha != 255) {
    203                 destRows[x * 4 + 0] = (srcRows[0] * alpha) / 255;
    204                 destRows[x * 4 + 1] = (srcRows[1] * alpha) / 255;
    205                 destRows[x * 4 + 2] = (srcRows[2] * alpha) / 255;
    206                 destRows[x * 4 + 3] = alpha;
     204                destRows[basex] = (srcRows[basex] * alpha + 254) / 255;
     205                destRows[basex + 1] = (srcRows[basex + 1] * alpha + 254) / 255;
     206                destRows[basex + 2] = (srcRows[basex + 2] * alpha + 254) / 255;
     207                destRows[basex + 3] = alpha;
    207208            } else {
    208                 reinterpret_cast<uint32_t*>(destRows + x * 4)[0] = reinterpret_cast<uint32_t*>(srcRows + x * 4)[0];
     209                reinterpret_cast<uint32_t*>(destRows + basex)[0] = reinterpret_cast<uint32_t*>(srcRows + basex)[0];
    209210            }
    210211        }
Note: See TracChangeset for help on using the changeset viewer.