diff options
Diffstat (limited to 'chromium/ui/gfx/image')
-rw-r--r-- | chromium/ui/gfx/image/image_generic.cc | 1 | ||||
-rw-r--r-- | chromium/ui/gfx/image/image_util.cc | 10 | ||||
-rw-r--r-- | chromium/ui/gfx/image/image_util_unittest.cc | 17 |
3 files changed, 23 insertions, 5 deletions
diff --git a/chromium/ui/gfx/image/image_generic.cc b/chromium/ui/gfx/image/image_generic.cc index d7606e1d8cd..3115fecfb8d 100644 --- a/chromium/ui/gfx/image/image_generic.cc +++ b/chromium/ui/gfx/image/image_generic.cc @@ -8,6 +8,7 @@ #include <set> #include <utility> +#include "base/logging.h" #include "ui/gfx/codec/png_codec.h" #include "ui/gfx/image/image_skia_source.h" diff --git a/chromium/ui/gfx/image/image_util.cc b/chromium/ui/gfx/image/image_util.cc index d21fb445716..0b6cacfca49 100644 --- a/chromium/ui/gfx/image/image_util.cc +++ b/chromium/ui/gfx/image/image_util.cc @@ -85,9 +85,15 @@ Image ResizedImageForSearchByImageSkiaRepresentation(const Image& image) { if (bitmap.height() * bitmap.width() > kSearchByImageMaxImageArea && (bitmap.width() > kSearchByImageMaxImageWidth || bitmap.height() > kSearchByImageMaxImageHeight)) { + double scale = std::min( + static_cast<double>(kSearchByImageMaxImageWidth) / bitmap.width(), + static_cast<double>(kSearchByImageMaxImageHeight) / bitmap.height()); + int width = base::ClampToRange<int>(scale * bitmap.width(), 1, + kSearchByImageMaxImageWidth); + int height = base::ClampToRange<int>(scale * bitmap.height(), 1, + kSearchByImageMaxImageHeight); SkBitmap new_bitmap = skia::ImageOperations::Resize( - bitmap, skia::ImageOperations::RESIZE_GOOD, kSearchByImageMaxImageWidth, - kSearchByImageMaxImageHeight); + bitmap, skia::ImageOperations::RESIZE_GOOD, width, height); return Image(ImageSkia(ImageSkiaRep(new_bitmap, 0.0f))); } diff --git a/chromium/ui/gfx/image/image_util_unittest.cc b/chromium/ui/gfx/image/image_util_unittest.cc index 40efde273aa..0ef65fdbb81 100644 --- a/chromium/ui/gfx/image/image_util_unittest.cc +++ b/chromium/ui/gfx/image/image_util_unittest.cc @@ -139,10 +139,21 @@ TEST(ImageUtilTest, ResizedImageForSearchByImage) { // Make sure the image large enough to let ResizedImageForSearchByImage to // resize the image. gfx::Image original_image = - gfx::test::CreateImage(gfx::kSearchByImageMaxImageHeight + 10, - gfx::kSearchByImageMaxImageWidth + 10); + gfx::test::CreateImage(gfx::kSearchByImageMaxImageWidth * 2, + gfx::kSearchByImageMaxImageHeight * 2); gfx::Image resized_image = gfx::ResizedImageForSearchByImage(original_image); - EXPECT_NE(original_image.Size(), resized_image.Size()); EXPECT_FALSE(resized_image.IsEmpty()); + EXPECT_EQ(resized_image.Width(), gfx::kSearchByImageMaxImageWidth); + EXPECT_EQ(resized_image.Height(), gfx::kSearchByImageMaxImageHeight); +} + +TEST(ImageUtilTest, ResizedImageForSearchByImageShouldKeepRatio) { + // Make sure the image large enough to let ResizedImageForSearchByImage to + // resize the image. + gfx::Image original_image = gfx::test::CreateImage(600, 600); + + gfx::Image resized_image = gfx::ResizedImageForSearchByImage(original_image); + EXPECT_EQ(resized_image.Width(), 400); + EXPECT_EQ(resized_image.Height(), 400); } |