Chromium Code Reviews| Index: Source/core/html/HTMLCanvasElement.cpp |
| diff --git a/Source/core/html/HTMLCanvasElement.cpp b/Source/core/html/HTMLCanvasElement.cpp |
| index a41bd5beb6c08ff3077a3349eed785e68b5293e3..4c6bd64d722fe2fc693610e29db1cccfbf9310e2 100644 |
| --- a/Source/core/html/HTMLCanvasElement.cpp |
| +++ b/Source/core/html/HTMLCanvasElement.cpp |
| @@ -469,22 +469,30 @@ String HTMLCanvasElement::toDataURLInternal(const String& mimeType, const double |
| return String("data:,"); |
| String encodingMimeType = toEncodingMimeType(mimeType); |
| - if (!m_context) { |
| - ImageData* imageData = ImageData::create(m_size); |
| - ScopedDisposal<ImageData> disposer(imageData); |
| - return ImageDataBuffer(imageData->size(), imageData->data()->data()).toDataURL(encodingMimeType, quality); |
| - } |
| - if (m_context->is3d()) { |
| + if (is3D()) { |
| // Get non-premultiplied data because of inaccurate premultiplied alpha conversion of buffer()->toDataURL(). |
| ImageData* imageData = m_context->paintRenderingResultsToImageData(sourceBuffer); |
| ScopedDisposal<ImageData> disposer(imageData); |
| - if (imageData) |
| + if (imageData) { |
|
Stephen White
2015/07/16 19:13:01
I think this would be clearer and have less code d
|
| return ImageDataBuffer(imageData->size(), imageData->data()->data()).toDataURL(encodingMimeType, quality); |
| + } |
| m_context->paintRenderingResultsToCanvas(sourceBuffer); |
| + imageData = ImageData::create(m_size); |
| + ScopedDisposal<ImageData> disposer2(imageData); |
| + return ImageDataBuffer(imageData->size(), imageData->data()->data()).toDataURL(encodingMimeType, quality); |
| + } |
| + |
| + ImageData* imageData = ImageData::create(m_size); |
| + ScopedDisposal<ImageData> disposer(imageData); |
| + |
| + if (m_context) { |
| + ASSERT(m_context->is2d()); |
| + SkImageInfo imageInfo = SkImageInfo::Make(width(), height(), kRGBA_8888_SkColorType, kUnpremul_SkAlphaType); |
| + buffer()->bitmap().readPixels(imageInfo, imageData->data()->data(), imageInfo.minRowBytes(), 0, 0); |
| } |
| - return buffer()->toDataURL(encodingMimeType, quality); |
| + return ImageDataBuffer(imageData->size(), imageData->data()->data()).toDataURL(encodingMimeType, quality); |
| } |
| String HTMLCanvasElement::toDataURL(const String& mimeType, const ScriptValue& qualityArgument, ExceptionState& exceptionState) const |