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

Unified Diff: skia/ext/image_operations.cc

Issue 100097: Reverting 14712. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « skia/ext/image_operations.h ('k') | skia/ext/image_operations_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: skia/ext/image_operations.cc
===================================================================
--- skia/ext/image_operations.cc (revision 14712)
+++ skia/ext/image_operations.cc (working copy)
@@ -15,8 +15,6 @@
#include "base/stack_container.h"
#include "SkBitmap.h"
#include "skia/ext/convolver.h"
-#include "skia/include/SkColorPriv.h"
-#include "skia/ext/skia_utils.h"
namespace skia {
@@ -265,7 +263,7 @@
"The supplied subset does not fall within the destination image.";
// If the size of source or destination is 0, i.e. 0x0, 0xN or Nx0, just
- // return empty.
+ // return empty
if (source.width() < 1 || source.height() < 1 ||
dest_width < 1 || dest_height < 1)
return SkBitmap();
@@ -317,10 +315,11 @@
// Optimize for case where we won't need to blend anything.
static const double alpha_min = 1.0 / 255;
static const double alpha_max = 254.0 / 255;
- if (alpha < alpha_min)
+ if (alpha < alpha_min) {
return first;
- else if (alpha > alpha_max)
+ } else if (alpha > alpha_max) {
return second;
+ }
SkAutoLockPixels lock_first(first);
SkAutoLockPixels lock_second(second);
@@ -362,206 +361,5 @@
return blended;
}
-// static
-SkBitmap ImageOperations::CreateMaskedBitmap(const SkBitmap& rgb,
- const SkBitmap& alpha) {
- DCHECK(rgb.width() == alpha.width());
- DCHECK(rgb.height() == alpha.height());
- DCHECK(rgb.bytesPerPixel() == alpha.bytesPerPixel());
- DCHECK(rgb.config() == SkBitmap::kARGB_8888_Config);
- DCHECK(alpha.config() == SkBitmap::kARGB_8888_Config);
-
- SkBitmap masked;
- masked.setConfig(SkBitmap::kARGB_8888_Config, rgb.width(), rgb.height(), 0);
- masked.allocPixels();
- masked.eraseARGB(0, 0, 0, 0);
-
- SkAutoLockPixels lock_rgb(rgb);
- SkAutoLockPixels lock_alpha(alpha);
- SkAutoLockPixels lock_masked(masked);
-
- for (int y = 0; y < rgb.height(); y++) {
- uint32* rgb_row = rgb.getAddr32(0, y);
- uint32* alpha_row = alpha.getAddr32(0, y);
- uint32* dst_row = masked.getAddr32(0, y);
-
- for (int x = 0; x < rgb.width(); x++) {
- uint32 alpha_pixel = alpha_row[x];
- uint32 rgb_pixel = rgb_row[x];
-
- int alpha = SkColorGetA(alpha_pixel);
- dst_row[x] = SkColorSetARGB(alpha,
- SkAlphaMul(SkColorGetR(rgb_pixel), alpha),
- SkAlphaMul(SkColorGetG(rgb_pixel), alpha),
- SkAlphaMul(SkColorGetB(rgb_pixel), alpha));
- }
- }
-
- return masked;
-}
-
-SkBitmap ImageOperations::CreateBlurredBitmap(const SkBitmap& bitmap,
- int blur_amount ) {
- DCHECK(bitmap.config() == SkBitmap::kARGB_8888_Config);
-
- // Blur factor (1 divided by how many pixels the blur takes place over).
- double v = 1.0 / pow(static_cast<double>(blur_amount * 2 + 1), 2);
-
- SkBitmap blurred;
- blurred.setConfig(SkBitmap::kARGB_8888_Config, bitmap.width(),
- bitmap.height(), 0);
- blurred.allocPixels();
- blurred.eraseARGB(0, 0, 0, 0);
-
- SkAutoLockPixels lock_bitmap(bitmap);
- SkAutoLockPixels lock_blurred(blurred);
-
- // Loop through every pixel in the image.
- for (int y = 0; y < bitmap.height(); y++) { // Skip top and bottom edges.
- uint32* dst_row = blurred.getAddr32(0, y);
-
- for (int x = 0; x < bitmap.width(); x++) { // Skip left and right edges.
- // Sums for this pixel.
- double a = 0;
- double r = 0;
- double g = 0;
- double b = 0;
-
- for (int ky = -blur_amount; ky <= blur_amount; ky++) {
- for (int kx = -blur_amount; kx <= blur_amount; kx++) {
- // Calculate the adjacent pixel for this kernel point. Blurs
- // are wrapped.
- int bx = (x + kx) % bitmap.width();
- while (bx < 0)
- bx += bitmap.width();
- int by = (y + ky) % bitmap.height();
- while (by < 0)
- by += bitmap.height();
-
- uint32 src_pixel = bitmap.getAddr32(0, by)[bx];
-
- a += v * static_cast<double>(SkColorGetA(src_pixel));
- r += v * static_cast<double>(SkColorGetR(src_pixel));
- g += v * static_cast<double>(SkColorGetG(src_pixel));
- b += v * static_cast<double>(SkColorGetB(src_pixel));
- }
- }
-
- dst_row[x] = SkColorSetARGB(
- static_cast<int>(a),
- static_cast<int>(r),
- static_cast<int>(g),
- static_cast<int>(b));
- }
- }
-
- return blurred;
-}
-
-// static
-SkBitmap ImageOperations::CreateHSLShiftedBitmap(const SkBitmap& bitmap,
- float hsl_shift[3]) {
- DCHECK(bitmap.config() == SkBitmap::kARGB_8888_Config);
-
- SkBitmap shifted;
- shifted.setConfig(SkBitmap::kARGB_8888_Config, bitmap.width(),
- bitmap.height(), 0);
- shifted.allocPixels();
- shifted.eraseARGB(0, 0, 0, 0);
- shifted.setIsOpaque(false);
-
- SkAutoLockPixels lock_bitmap(bitmap);
- SkAutoLockPixels lock_shifted(shifted);
-
- // Loop through the pixels of the original bitmap.
- for (int y = 0; y < bitmap.height(); y++) {
- SkColor* pixels = bitmap.getAddr32(0, y);
- SkColor* tinted_pixels = shifted.getAddr32(0, y);
-
- for (int x = 0; x < bitmap.width(); x++) {
- // Convert the color of this pixel to HSL.
- SkPMColor color = pixels[x];
- int alpha = SkColorGetA(color);
- if (alpha != 255) {
- // We have to normalize the colors as they're pre-multiplied.
- double r = SkColorGetR(color) / static_cast<double>(alpha);
- double g = SkColorGetG(color) / static_cast<double>(alpha);
- double b = SkColorGetB(color) / static_cast<double>(alpha);
- color = SkColorSetARGB(255,
- static_cast<int>(r * 255.0),
- static_cast<int>(g * 255.0),
- static_cast<int>(b * 255.0));
- }
-
- float pixel_hsl[3];
- SkColorToHSL(color, pixel_hsl);
-
- // Replace the hue with the tint's hue.
- if (hsl_shift[0] >= 0)
- pixel_hsl[0] = hsl_shift[0];
-
- // Change the saturation.
- if (hsl_shift[1] >= 0) {
- if (hsl_shift[1] <= 0.5) {
- pixel_hsl[1] *= hsl_shift[1] * 2.0;
- } else {
- pixel_hsl[1] = pixel_hsl[1] + (1.0 - pixel_hsl[1]) *
- ((hsl_shift[1] - 0.5) * 2.0);
- }
- }
-
- // Change the lightness.
- if (hsl_shift[2] >= 0) {
- if (hsl_shift[2] <= 0.5) {
- pixel_hsl[2] *= hsl_shift[2] * 2.0;
- } else {
- pixel_hsl[2] = pixel_hsl[2] + (1.0 - pixel_hsl[2]) *
- ((hsl_shift[2] - 0.5) * 2.0);
- }
- }
-
- // Convert back to RGB.
- tinted_pixels[x] = HSLToSKColor(alpha, pixel_hsl);
- }
- }
-
- return shifted;
-}
-
-// static
-SkBitmap ImageOperations::CreateTiledBitmap(const SkBitmap& source,
- int src_x, int src_y,
- int dst_w, int dst_h) {
- DCHECK(source.getConfig() == SkBitmap::kARGB_8888_Config);
-
- SkBitmap cropped;
- cropped.setConfig(SkBitmap::kARGB_8888_Config, dst_w, dst_h, 0);
- cropped.allocPixels();
- cropped.eraseARGB(0, 0, 0, 0);
-
- SkAutoLockPixels lock_source(source);
- SkAutoLockPixels lock_cropped(cropped);
-
- // Loop through the pixels of the original bitmap.
- for (int y = 0; y < dst_h; y++) {
- int y_pix = (src_y + y) % source.height();
- while (y_pix < 0)
- y_pix += source.height();
-
- uint32* source_row = source.getAddr32(0, y_pix);
- uint32* dst_row = cropped.getAddr32(0, y);
-
- for (int x = 0; x < dst_w; x++) {
- int x_pix = (src_x + x) % source.width();
- while (x_pix < 0)
- x_pix += source.width();
-
- dst_row[x] = source_row[x_pix];
- }
- }
-
- return cropped;
-}
-
} // namespace skia
« no previous file with comments | « skia/ext/image_operations.h ('k') | skia/ext/image_operations_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698