OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2008, Google Inc. All rights reserved. | 2 * Copyright (c) 2008, Google Inc. All rights reserved. |
3 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> | 3 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> |
4 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. | 4 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. |
5 * | 5 * |
6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
7 * modification, are permitted provided that the following conditions are | 7 * modification, are permitted provided that the following conditions are |
8 * met: | 8 * met: |
9 * | 9 * |
10 * * Redistributions of source code must retain the above copyright | 10 * * Redistributions of source code must retain the above copyright |
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
263 | 263 |
264 template <Multiply multiplied> | 264 template <Multiply multiplied> |
265 PassRefPtr<Uint8ClampedArray> getImageData(const IntRect& rect, GraphicsContext* context, const IntSize& size) | 265 PassRefPtr<Uint8ClampedArray> getImageData(const IntRect& rect, GraphicsContext* context, const IntSize& size) |
266 { | 266 { |
267 float area = 4.0f * rect.width() * rect.height(); | 267 float area = 4.0f * rect.width() * rect.height(); |
268 if (area > static_cast<float>(std::numeric_limits<int>::max())) | 268 if (area > static_cast<float>(std::numeric_limits<int>::max())) |
269 return nullptr; | 269 return nullptr; |
270 | 270 |
271 RefPtr<Uint8ClampedArray> result = Uint8ClampedArray::createUninitialized(re ct.width() * rect.height() * 4); | 271 RefPtr<Uint8ClampedArray> result = Uint8ClampedArray::createUninitialized(re ct.width() * rect.height() * 4); |
272 | 272 |
273 unsigned char* data = result->data(); | |
274 | |
275 if (rect.x() < 0 | 273 if (rect.x() < 0 |
276 || rect.y() < 0 | 274 || rect.y() < 0 |
277 || rect.maxX() > size.width() | 275 || rect.maxX() > size.width() |
278 || rect.maxY() > size.height()) | 276 || rect.maxY() > size.height()) |
279 result->zeroFill(); | 277 result->zeroFill(); |
280 | 278 |
281 unsigned destBytesPerRow = 4 * rect.width(); | 279 SkAlphaType = (multiplied == Premultiplied) ? kPremul_SkAlphaType : kUnpremu l_SkAlphaType; |
f(malita)
2014/03/18 16:08:24
SkAlphaType alphaType = ...
reed1
2014/03/18 19:39:38
Doh!
| |
282 SkBitmap destBitmap; | 280 SkImageInfo info = SkImageInfo::Make(rect.width(), rect.height(), kRGBA_8888 _SkColorType, alphaType); |
283 destBitmap.installPixels(SkImageInfo::MakeN32Premul(rect.width(), rect.heigh t()), data, destBytesPerRow); | |
284 | 281 |
285 SkCanvas::Config8888 config8888; | 282 if (!context->readPixels(info, result->data(), 4 * rect.width(), rect.x(), r ect.y())) |
286 if (multiplied == Premultiplied) | 283 return nullptr; |
287 config8888 = SkCanvas::kRGBA_Premul_Config8888; | |
288 else | |
289 config8888 = SkCanvas::kRGBA_Unpremul_Config8888; | |
290 | |
291 context->readPixels(&destBitmap, rect.x(), rect.y(), config8888); | |
292 return result.release(); | 284 return result.release(); |
293 } | 285 } |
294 | 286 |
295 PassRefPtr<Uint8ClampedArray> ImageBuffer::getUnmultipliedImageData(const IntRec t& rect) const | 287 PassRefPtr<Uint8ClampedArray> ImageBuffer::getUnmultipliedImageData(const IntRec t& rect) const |
296 { | 288 { |
297 if (!isValid()) | 289 if (!isValid()) |
298 return Uint8ClampedArray::create(rect.width() * rect.height() * 4); | 290 return Uint8ClampedArray::create(rect.width() * rect.height() * 4); |
299 return getImageData<Unmultiplied>(rect, context(), m_surface->size()); | 291 return getImageData<Unmultiplied>(rect, context(), m_surface->size()); |
300 } | 292 } |
301 | 293 |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
383 if (!encodeImage(imageData, mimeType, quality, &encodedImage)) | 375 if (!encodeImage(imageData, mimeType, quality, &encodedImage)) |
384 return "data:,"; | 376 return "data:,"; |
385 | 377 |
386 Vector<char> base64Data; | 378 Vector<char> base64Data; |
387 base64Encode(encodedImage, base64Data); | 379 base64Encode(encodedImage, base64Data); |
388 | 380 |
389 return "data:" + mimeType + ";base64," + base64Data; | 381 return "data:" + mimeType + ";base64," + base64Data; |
390 } | 382 } |
391 | 383 |
392 } // namespace WebCore | 384 } // namespace WebCore |
OLD | NEW |