| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/gfx/skbitmap_operations.h" | 5 #include "ui/gfx/skbitmap_operations.h" |
| 6 | 6 |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 647 return result; | 647 return result; |
| 648 } | 648 } |
| 649 | 649 |
| 650 // static | 650 // static |
| 651 SkBitmap SkBitmapOperations::UnPreMultiply(const SkBitmap& bitmap) { | 651 SkBitmap SkBitmapOperations::UnPreMultiply(const SkBitmap& bitmap) { |
| 652 if (bitmap.isNull()) | 652 if (bitmap.isNull()) |
| 653 return bitmap; | 653 return bitmap; |
| 654 if (bitmap.isOpaque()) | 654 if (bitmap.isOpaque()) |
| 655 return bitmap; | 655 return bitmap; |
| 656 | 656 |
| 657 SkImageInfo info = bitmap.info(); | 657 const SkImageInfo& info = bitmap.info(); |
| 658 info.fAlphaType = kOpaque_SkAlphaType; | 658 SkImageInfo opaque_info = |
| 659 SkImageInfo::Make(info.width(), info.height(), info.colorType(), |
| 660 kOpaque_SkAlphaType, info.profileType()); |
| 659 SkBitmap opaque_bitmap; | 661 SkBitmap opaque_bitmap; |
| 660 opaque_bitmap.allocPixels(info); | 662 opaque_bitmap.allocPixels(opaque_info); |
| 661 | 663 |
| 662 { | 664 { |
| 663 SkAutoLockPixels bitmap_lock(bitmap); | 665 SkAutoLockPixels bitmap_lock(bitmap); |
| 664 SkAutoLockPixels opaque_bitmap_lock(opaque_bitmap); | 666 SkAutoLockPixels opaque_bitmap_lock(opaque_bitmap); |
| 665 for (int y = 0; y < opaque_bitmap.height(); y++) { | 667 for (int y = 0; y < opaque_bitmap.height(); y++) { |
| 666 for (int x = 0; x < opaque_bitmap.width(); x++) { | 668 for (int x = 0; x < opaque_bitmap.width(); x++) { |
| 667 uint32 src_pixel = *bitmap.getAddr32(x, y); | 669 uint32 src_pixel = *bitmap.getAddr32(x, y); |
| 668 uint32* dst_pixel = opaque_bitmap.getAddr32(x, y); | 670 uint32* dst_pixel = opaque_bitmap.getAddr32(x, y); |
| 669 SkColor unmultiplied = SkUnPreMultiply::PMColorToColor(src_pixel); | 671 SkColor unmultiplied = SkUnPreMultiply::PMColorToColor(src_pixel); |
| 670 *dst_pixel = unmultiplied; | 672 *dst_pixel = unmultiplied; |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 784 canvas.translate(SkFloatToScalar(result.width() * 0.5f), | 786 canvas.translate(SkFloatToScalar(result.width() * 0.5f), |
| 785 SkFloatToScalar(result.height() * 0.5f)); | 787 SkFloatToScalar(result.height() * 0.5f)); |
| 786 canvas.rotate(angle); | 788 canvas.rotate(angle); |
| 787 canvas.translate(-SkFloatToScalar(source.width() * 0.5f), | 789 canvas.translate(-SkFloatToScalar(source.width() * 0.5f), |
| 788 -SkFloatToScalar(source.height() * 0.5f)); | 790 -SkFloatToScalar(source.height() * 0.5f)); |
| 789 canvas.drawBitmap(source, 0, 0); | 791 canvas.drawBitmap(source, 0, 0); |
| 790 canvas.flush(); | 792 canvas.flush(); |
| 791 | 793 |
| 792 return result; | 794 return result; |
| 793 } | 795 } |
| OLD | NEW |