Index: ui/gfx/image/image_skia.cc |
diff --git a/ui/gfx/image/image_skia.cc b/ui/gfx/image/image_skia.cc |
index e5fb8e3c617ce18b81fb4c00aea2918c07cd49d2..0dd7bffcb03ed628d97c322d69331fb9fd97512e 100644 |
--- a/ui/gfx/image/image_skia.cc |
+++ b/ui/gfx/image/image_skia.cc |
@@ -8,7 +8,9 @@ |
#include <cmath> |
#include "base/logging.h" |
+#include "skia/ext/image_operations.h" |
#include "ui/gfx/size.h" |
+#include "ui/gfx/skbitmap_operations.h" |
#include "ui/gfx/skia_util.h" |
namespace gfx { |
@@ -168,6 +170,55 @@ bool ImageSkia::extractSubset(ImageSkia* dst, const SkIRect& subset) const { |
return true; |
} |
+ImageSkia ImageSkia::Resize(const gfx::Size& size) const { |
+ DCHECK(!empty()); |
+ |
+ if (width() == size.width() && height() == size.height()) |
+ return *this; |
+ |
+ ImageSkia image; |
+ ImageSkiaReps& image_reps = storage_->image_reps(); |
+ for (ImageSkiaReps::iterator it = image_reps.begin(); |
+ it != image_reps.end(); ++it) { |
+ const ImageSkiaRep& image_rep = *it; |
+ float dip_scale = image_rep.GetScale(); |
+ |
+ gfx::Size scaled_size(static_cast<int>(size.width() * dip_scale), |
+ static_cast<int>(size.height() * dip_scale)); |
+ SkBitmap resized = skia::ImageOperations::Resize(image_rep.sk_bitmap(), |
+ skia::ImageOperations::RESIZE_BEST, |
+ scaled_size.width(), |
+ scaled_size.height()); |
+ image.AddRepresentation(ImageSkiaRep(resized, image_rep.scale_factor())); |
+ } |
+ |
+ return image; |
+} |
+ |
+ImageSkia ImageSkia::CreateDropShadow(const gfx::ShadowValues& shadows) const { |
+ DCHECK(!empty()); |
+ |
+ ImageSkia image; |
+ ImageSkiaReps& image_reps = storage_->image_reps(); |
+ for (ImageSkiaReps::iterator it = image_reps.begin(); |
+ it != image_reps.end(); ++it) { |
+ const ImageSkiaRep& image_rep = *it; |
+ float dip_scale = image_rep.GetScale(); |
+ |
+ gfx::ShadowValues scaled_shadows; |
+ for (size_t i = 0; i < shadows.size(); ++i) |
+ scaled_shadows.push_back(shadows[i].GetScaled(dip_scale)); |
+ |
+ SkBitmap shadow_image = SkBitmapOperations::CreateDropShadow( |
+ image_rep.sk_bitmap(), |
+ scaled_shadows); |
+ image.AddRepresentation(ImageSkiaRep(shadow_image, |
+ image_rep.scale_factor())); |
+ } |
+ |
+ return image; |
+} |
+ |
std::vector<ImageSkiaRep> ImageSkia::image_reps() const { |
if (isNull()) |
return std::vector<ImageSkiaRep>(); |