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

Unified Diff: ui/gfx/image/image_skia_operations.cc

Issue 11017046: Use LANCZOS3 resize algorithm to generate missing image reps for extension action icons. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 8 years, 2 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
Index: ui/gfx/image/image_skia_operations.cc
diff --git a/ui/gfx/image/image_skia_operations.cc b/ui/gfx/image/image_skia_operations.cc
index 8afaf876eab4e777ab66f447b1b37bac9554ebb8..753ee88cf9770bb57c810d73900577401aa0a8b2 100644
--- a/ui/gfx/image/image_skia_operations.cc
+++ b/ui/gfx/image/image_skia_operations.cc
@@ -344,6 +344,40 @@ class ResizeSource : public ImageSkiaSource {
DISALLOW_COPY_AND_ASSIGN(ResizeSource);
};
+// Image source that uses |resize_method| to generate missing image
+// representations.
+class FallbackResizeSource : public ImageSkiaSource {
pkotwicz 2012/10/16 22:13:27 Can you use ResizeSource here? Also can you fix th
tbarzic 2012/10/16 23:19:33 Done.
+ public:
+ FallbackResizeSource(const ImageSkia& source,
+ skia::ImageOperations::ResizeMethod resize_method)
+ : source_(source),
+ resize_method_(resize_method) {
+ }
+ virtual ~FallbackResizeSource() {}
+
+ // gfx::ImageSkiaSource overrides:
+ virtual ImageSkiaRep GetImageForScale(ui::ScaleFactor scale_factor) OVERRIDE {
+ const ImageSkiaRep& image_rep = source_.GetRepresentation(scale_factor);
+ if (image_rep.scale_factor() == scale_factor)
+ return image_rep;
+
+ const float scale = ui::GetScaleFactorScale(scale_factor);
+ const Size target_pixel_size = gfx::ToFlooredSize(
+ source_.size().Scale(scale));
+
+ const SkBitmap resized = skia::ImageOperations::Resize(
+ image_rep.sk_bitmap(),
+ resize_method_,
+ target_pixel_size.width(),
+ target_pixel_size.height());
+ return ImageSkiaRep(resized, scale_factor);
+ }
+
+ private:
+ ImageSkia source_;
+ skia::ImageOperations::ResizeMethod resize_method_;
+};
+
// DropShadowSource generates image reps with drop shadow for image reps in
// |source| that represent requested scale factors.
class DropShadowSource : public ImageSkiaSource {
@@ -449,6 +483,14 @@ ImageSkia ImageSkiaOperations::CreateResizedImage(
}
// static
+ImageSkia ImageSkiaOperations::CreateImageWithFallbackResizeMethod(
+ const ImageSkia& source,
+ skia::ImageOperations::ResizeMethod resize_method) {
+ return ImageSkia(new FallbackResizeSource(source, resize_method),
+ source.size());
+}
+
+// static
ImageSkia ImageSkiaOperations::CreateImageWithDropShadow(
const ImageSkia& source,
const ShadowValues& shadows) {
« ui/gfx/image/image_skia_operations.h ('K') | « ui/gfx/image/image_skia_operations.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698