Changeset 40546 in webkit
- Timestamp:
- Feb 3, 2009 1:26:14 PM (15 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r40545 r40546 1 2009-02-03 Dirk Schulze <krit@webkit.org> 2 3 Reviewed by Sam Weinig and Oliver Hunt. 4 5 Added getImageData() support for QtWebKit. 6 7 [QT] lacks getImageData / putImageData support in Canvas 8 https://bugs.webkit.org/show_bug.cgi?id=22186 9 10 * platform/graphics/qt/ImageBufferQt.cpp: 11 (WebCore::ImageBuffer::getImageData): 12 1 13 2009-02-03 Eric Roman <eroman@chromium.org> 2 14 -
trunk/WebCore/platform/graphics/qt/ImageBufferQt.cpp
r38006 r40546 36 36 37 37 #include <QBuffer> 38 #include <QColor> 39 #include <QImage> 38 40 #include <QImageWriter> 39 41 #include <QPainter> … … 80 82 } 81 83 82 PassRefPtr<ImageData> ImageBuffer::getImageData(const IntRect& ) const84 PassRefPtr<ImageData> ImageBuffer::getImageData(const IntRect& rect) const 83 85 { 84 notImplemented(); 85 return 0; 86 PassRefPtr<ImageData> result = ImageData::create(rect.width(), rect.height()); 87 unsigned char* data = result->data()->data()->data(); 88 89 if (rect.x() < 0 || rect.y() < 0 || (rect.x() + rect.width()) > m_size.width() || (rect.y() + rect.height()) > m_size.height()) 90 memset(data, 0, result->data()->length()); 91 92 int originx = rect.x(); 93 int destx = 0; 94 if (originx < 0) { 95 destx = -originx; 96 originx = 0; 97 } 98 int endx = rect.x() + rect.width(); 99 if (endx > m_size.width()) 100 endx = m_size.width(); 101 int numColumns = endx - originx; 102 103 int originy = rect.y(); 104 int desty = 0; 105 if (originy < 0) { 106 desty = -originy; 107 originy = 0; 108 } 109 int endy = rect.y() + rect.height(); 110 if (endy > m_size.height()) 111 endy = m_size.height(); 112 int numRows = endy - originy; 113 114 QImage image; 115 if (m_data.m_pixmap.toImage().format() != QImage::Format_ARGB32) 116 image = m_data.m_pixmap.toImage().convertToFormat(QImage::Format_ARGB32); 117 else 118 image = m_data.m_pixmap.toImage(); 119 ASSERT(image); 120 121 unsigned destBytesPerRow = 4 * rect.width(); 122 unsigned char* destRows = data + desty * destBytesPerRow + destx * 4; 123 for (int y = 0; y < numRows; ++y) { 124 for (int x = 0; x < numColumns; x++) { 125 QRgb value = image.pixel(x + originx, y + originy); 126 int basex = x * 4; 127 128 destRows[basex] = qRed(value); 129 destRows[basex + 1] = qGreen(value); 130 destRows[basex + 2] = qBlue(value); 131 destRows[basex + 3] = qAlpha(value); 132 } 133 destRows += destBytesPerRow; 134 } 135 136 return result; 86 137 } 87 138
Note: See TracChangeset
for help on using the changeset viewer.