Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(394)

Side by Side Diff: ui/gfx/skbitmap_operations.cc

Issue 1543183002: Switch to standard integer types in ui/gfx/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/gfx/shadow_value_unittest.cc ('k') | ui/gfx/skbitmap_operations_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <stddef.h>
8 #include <stdint.h>
7 #include <string.h> 9 #include <string.h>
8 #include <algorithm> 10 #include <algorithm>
9 11
10 #include "base/logging.h" 12 #include "base/logging.h"
11 #include "skia/ext/refptr.h" 13 #include "skia/ext/refptr.h"
12 #include "third_party/skia/include/core/SkBitmap.h" 14 #include "third_party/skia/include/core/SkBitmap.h"
13 #include "third_party/skia/include/core/SkCanvas.h" 15 #include "third_party/skia/include/core/SkCanvas.h"
14 #include "third_party/skia/include/core/SkColorFilter.h" 16 #include "third_party/skia/include/core/SkColorFilter.h"
15 #include "third_party/skia/include/core/SkColorPriv.h" 17 #include "third_party/skia/include/core/SkColorPriv.h"
16 #include "third_party/skia/include/core/SkUnPreMultiply.h" 18 #include "third_party/skia/include/core/SkUnPreMultiply.h"
17 #include "third_party/skia/include/effects/SkBlurImageFilter.h" 19 #include "third_party/skia/include/effects/SkBlurImageFilter.h"
18 #include "ui/gfx/geometry/insets.h" 20 #include "ui/gfx/geometry/insets.h"
19 #include "ui/gfx/geometry/point.h" 21 #include "ui/gfx/geometry/point.h"
20 #include "ui/gfx/geometry/size.h" 22 #include "ui/gfx/geometry/size.h"
21 23
22 // static 24 // static
23 SkBitmap SkBitmapOperations::CreateInvertedBitmap(const SkBitmap& image) { 25 SkBitmap SkBitmapOperations::CreateInvertedBitmap(const SkBitmap& image) {
24 DCHECK(image.colorType() == kN32_SkColorType); 26 DCHECK(image.colorType() == kN32_SkColorType);
25 27
26 SkAutoLockPixels lock_image(image); 28 SkAutoLockPixels lock_image(image);
27 29
28 SkBitmap inverted; 30 SkBitmap inverted;
29 inverted.allocN32Pixels(image.width(), image.height()); 31 inverted.allocN32Pixels(image.width(), image.height());
30 32
31 for (int y = 0; y < image.height(); ++y) { 33 for (int y = 0; y < image.height(); ++y) {
32 uint32* image_row = image.getAddr32(0, y); 34 uint32_t* image_row = image.getAddr32(0, y);
33 uint32* dst_row = inverted.getAddr32(0, y); 35 uint32_t* dst_row = inverted.getAddr32(0, y);
34 36
35 for (int x = 0; x < image.width(); ++x) { 37 for (int x = 0; x < image.width(); ++x) {
36 uint32 image_pixel = image_row[x]; 38 uint32_t image_pixel = image_row[x];
37 dst_row[x] = (image_pixel & 0xFF000000) | 39 dst_row[x] = (image_pixel & 0xFF000000) |
38 (0x00FFFFFF - (image_pixel & 0x00FFFFFF)); 40 (0x00FFFFFF - (image_pixel & 0x00FFFFFF));
39 } 41 }
40 } 42 }
41 43
42 return inverted; 44 return inverted;
43 } 45 }
44 46
45 // static 47 // static
46 SkBitmap SkBitmapOperations::CreateBlendedBitmap(const SkBitmap& first, 48 SkBitmap SkBitmapOperations::CreateBlendedBitmap(const SkBitmap& first,
(...skipping 15 matching lines...) Expand all
62 64
63 SkAutoLockPixels lock_first(first); 65 SkAutoLockPixels lock_first(first);
64 SkAutoLockPixels lock_second(second); 66 SkAutoLockPixels lock_second(second);
65 67
66 SkBitmap blended; 68 SkBitmap blended;
67 blended.allocN32Pixels(first.width(), first.height()); 69 blended.allocN32Pixels(first.width(), first.height());
68 70
69 double first_alpha = 1 - alpha; 71 double first_alpha = 1 - alpha;
70 72
71 for (int y = 0; y < first.height(); ++y) { 73 for (int y = 0; y < first.height(); ++y) {
72 uint32* first_row = first.getAddr32(0, y); 74 uint32_t* first_row = first.getAddr32(0, y);
73 uint32* second_row = second.getAddr32(0, y); 75 uint32_t* second_row = second.getAddr32(0, y);
74 uint32* dst_row = blended.getAddr32(0, y); 76 uint32_t* dst_row = blended.getAddr32(0, y);
75 77
76 for (int x = 0; x < first.width(); ++x) { 78 for (int x = 0; x < first.width(); ++x) {
77 uint32 first_pixel = first_row[x]; 79 uint32_t first_pixel = first_row[x];
78 uint32 second_pixel = second_row[x]; 80 uint32_t second_pixel = second_row[x];
79 81
80 int a = static_cast<int>((SkColorGetA(first_pixel) * first_alpha) + 82 int a = static_cast<int>((SkColorGetA(first_pixel) * first_alpha) +
81 (SkColorGetA(second_pixel) * alpha)); 83 (SkColorGetA(second_pixel) * alpha));
82 int r = static_cast<int>((SkColorGetR(first_pixel) * first_alpha) + 84 int r = static_cast<int>((SkColorGetR(first_pixel) * first_alpha) +
83 (SkColorGetR(second_pixel) * alpha)); 85 (SkColorGetR(second_pixel) * alpha));
84 int g = static_cast<int>((SkColorGetG(first_pixel) * first_alpha) + 86 int g = static_cast<int>((SkColorGetG(first_pixel) * first_alpha) +
85 (SkColorGetG(second_pixel) * alpha)); 87 (SkColorGetG(second_pixel) * alpha));
86 int b = static_cast<int>((SkColorGetB(first_pixel) * first_alpha) + 88 int b = static_cast<int>((SkColorGetB(first_pixel) * first_alpha) +
87 (SkColorGetB(second_pixel) * alpha)); 89 (SkColorGetB(second_pixel) * alpha));
88 90
(...skipping 14 matching lines...) Expand all
103 DCHECK(alpha.colorType() == kN32_SkColorType); 105 DCHECK(alpha.colorType() == kN32_SkColorType);
104 106
105 SkBitmap masked; 107 SkBitmap masked;
106 masked.allocN32Pixels(rgb.width(), rgb.height()); 108 masked.allocN32Pixels(rgb.width(), rgb.height());
107 109
108 SkAutoLockPixels lock_rgb(rgb); 110 SkAutoLockPixels lock_rgb(rgb);
109 SkAutoLockPixels lock_alpha(alpha); 111 SkAutoLockPixels lock_alpha(alpha);
110 SkAutoLockPixels lock_masked(masked); 112 SkAutoLockPixels lock_masked(masked);
111 113
112 for (int y = 0; y < masked.height(); ++y) { 114 for (int y = 0; y < masked.height(); ++y) {
113 uint32* rgb_row = rgb.getAddr32(0, y); 115 uint32_t* rgb_row = rgb.getAddr32(0, y);
114 uint32* alpha_row = alpha.getAddr32(0, y); 116 uint32_t* alpha_row = alpha.getAddr32(0, y);
115 uint32* dst_row = masked.getAddr32(0, y); 117 uint32_t* dst_row = masked.getAddr32(0, y);
116 118
117 for (int x = 0; x < masked.width(); ++x) { 119 for (int x = 0; x < masked.width(); ++x) {
118 unsigned alpha = SkGetPackedA32(alpha_row[x]); 120 unsigned alpha = SkGetPackedA32(alpha_row[x]);
119 unsigned scale = SkAlpha255To256(alpha); 121 unsigned scale = SkAlpha255To256(alpha);
120 dst_row[x] = SkAlphaMulQ(rgb_row[x], scale); 122 dst_row[x] = SkAlphaMulQ(rgb_row[x], scale);
121 } 123 }
122 } 124 }
123 125
124 return masked; 126 return masked;
125 } 127 }
(...skipping 11 matching lines...) Expand all
137 double bg_a = SkColorGetA(color); 139 double bg_a = SkColorGetA(color);
138 double bg_r = SkColorGetR(color); 140 double bg_r = SkColorGetR(color);
139 double bg_g = SkColorGetG(color); 141 double bg_g = SkColorGetG(color);
140 double bg_b = SkColorGetB(color); 142 double bg_b = SkColorGetB(color);
141 143
142 SkAutoLockPixels lock_mask(mask); 144 SkAutoLockPixels lock_mask(mask);
143 SkAutoLockPixels lock_image(image); 145 SkAutoLockPixels lock_image(image);
144 SkAutoLockPixels lock_background(background); 146 SkAutoLockPixels lock_background(background);
145 147
146 for (int y = 0; y < mask.height(); ++y) { 148 for (int y = 0; y < mask.height(); ++y) {
147 uint32* dst_row = background.getAddr32(0, y); 149 uint32_t* dst_row = background.getAddr32(0, y);
148 uint32* image_row = image.getAddr32(0, y % image.height()); 150 uint32_t* image_row = image.getAddr32(0, y % image.height());
149 uint32* mask_row = mask.getAddr32(0, y); 151 uint32_t* mask_row = mask.getAddr32(0, y);
150 152
151 for (int x = 0; x < mask.width(); ++x) { 153 for (int x = 0; x < mask.width(); ++x) {
152 uint32 image_pixel = image_row[x % image.width()]; 154 uint32_t image_pixel = image_row[x % image.width()];
153 155
154 double img_a = SkColorGetA(image_pixel); 156 double img_a = SkColorGetA(image_pixel);
155 double img_r = SkColorGetR(image_pixel); 157 double img_r = SkColorGetR(image_pixel);
156 double img_g = SkColorGetG(image_pixel); 158 double img_g = SkColorGetG(image_pixel);
157 double img_b = SkColorGetB(image_pixel); 159 double img_b = SkColorGetB(image_pixel);
158 160
159 double img_alpha = static_cast<double>(img_a) / 255.0; 161 double img_alpha = static_cast<double>(img_a) / 255.0;
160 double img_inv = 1 - img_alpha; 162 double img_inv = 1 - img_alpha;
161 163
162 double mask_a = static_cast<double>(SkColorGetA(mask_row[x])) / 255.0; 164 double mask_a = static_cast<double>(SkColorGetA(mask_row[x])) / 255.0;
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 540
539 SkAutoLockPixels lock_source(source); 541 SkAutoLockPixels lock_source(source);
540 SkAutoLockPixels lock_cropped(cropped); 542 SkAutoLockPixels lock_cropped(cropped);
541 543
542 // Loop through the pixels of the original bitmap. 544 // Loop through the pixels of the original bitmap.
543 for (int y = 0; y < dst_h; ++y) { 545 for (int y = 0; y < dst_h; ++y) {
544 int y_pix = (src_y + y) % source.height(); 546 int y_pix = (src_y + y) % source.height();
545 while (y_pix < 0) 547 while (y_pix < 0)
546 y_pix += source.height(); 548 y_pix += source.height();
547 549
548 uint32* source_row = source.getAddr32(0, y_pix); 550 uint32_t* source_row = source.getAddr32(0, y_pix);
549 uint32* dst_row = cropped.getAddr32(0, y); 551 uint32_t* dst_row = cropped.getAddr32(0, y);
550 552
551 for (int x = 0; x < dst_w; ++x) { 553 for (int x = 0; x < dst_w; ++x) {
552 int x_pix = (src_x + x) % source.width(); 554 int x_pix = (src_x + x) % source.width();
553 while (x_pix < 0) 555 while (x_pix < 0)
554 x_pix += source.width(); 556 x_pix += source.width();
555 557
556 dst_row[x] = source_row[x_pix]; 558 dst_row[x] = source_row[x_pix];
557 } 559 }
558 } 560 }
559 561
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 SkImageInfo::Make(info.width(), info.height(), info.colorType(), 654 SkImageInfo::Make(info.width(), info.height(), info.colorType(),
653 kOpaque_SkAlphaType, info.profileType()); 655 kOpaque_SkAlphaType, info.profileType());
654 SkBitmap opaque_bitmap; 656 SkBitmap opaque_bitmap;
655 opaque_bitmap.allocPixels(opaque_info); 657 opaque_bitmap.allocPixels(opaque_info);
656 658
657 { 659 {
658 SkAutoLockPixels bitmap_lock(bitmap); 660 SkAutoLockPixels bitmap_lock(bitmap);
659 SkAutoLockPixels opaque_bitmap_lock(opaque_bitmap); 661 SkAutoLockPixels opaque_bitmap_lock(opaque_bitmap);
660 for (int y = 0; y < opaque_bitmap.height(); y++) { 662 for (int y = 0; y < opaque_bitmap.height(); y++) {
661 for (int x = 0; x < opaque_bitmap.width(); x++) { 663 for (int x = 0; x < opaque_bitmap.width(); x++) {
662 uint32 src_pixel = *bitmap.getAddr32(x, y); 664 uint32_t src_pixel = *bitmap.getAddr32(x, y);
663 uint32* dst_pixel = opaque_bitmap.getAddr32(x, y); 665 uint32_t* dst_pixel = opaque_bitmap.getAddr32(x, y);
664 SkColor unmultiplied = SkUnPreMultiply::PMColorToColor(src_pixel); 666 SkColor unmultiplied = SkUnPreMultiply::PMColorToColor(src_pixel);
665 *dst_pixel = unmultiplied; 667 *dst_pixel = unmultiplied;
666 } 668 }
667 } 669 }
668 } 670 }
669 671
670 return opaque_bitmap; 672 return opaque_bitmap;
671 } 673 }
672 674
673 // static 675 // static
674 SkBitmap SkBitmapOperations::CreateTransposedBitmap(const SkBitmap& image) { 676 SkBitmap SkBitmapOperations::CreateTransposedBitmap(const SkBitmap& image) {
675 DCHECK(image.colorType() == kN32_SkColorType); 677 DCHECK(image.colorType() == kN32_SkColorType);
676 678
677 SkBitmap transposed; 679 SkBitmap transposed;
678 transposed.allocN32Pixels(image.height(), image.width()); 680 transposed.allocN32Pixels(image.height(), image.width());
679 681
680 SkAutoLockPixels lock_image(image); 682 SkAutoLockPixels lock_image(image);
681 SkAutoLockPixels lock_transposed(transposed); 683 SkAutoLockPixels lock_transposed(transposed);
682 684
683 for (int y = 0; y < image.height(); ++y) { 685 for (int y = 0; y < image.height(); ++y) {
684 uint32* image_row = image.getAddr32(0, y); 686 uint32_t* image_row = image.getAddr32(0, y);
685 for (int x = 0; x < image.width(); ++x) { 687 for (int x = 0; x < image.width(); ++x) {
686 uint32* dst = transposed.getAddr32(y, x); 688 uint32_t* dst = transposed.getAddr32(y, x);
687 *dst = image_row[x]; 689 *dst = image_row[x];
688 } 690 }
689 } 691 }
690 692
691 return transposed; 693 return transposed;
692 } 694 }
693 695
694 // static 696 // static
695 SkBitmap SkBitmapOperations::CreateColorMask(const SkBitmap& bitmap, 697 SkBitmap SkBitmapOperations::CreateColorMask(const SkBitmap& bitmap,
696 SkColor c) { 698 SkColor c) {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 }
OLDNEW
« no previous file with comments | « ui/gfx/shadow_value_unittest.cc ('k') | ui/gfx/skbitmap_operations_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698