// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef UI_GFX_IMAGE_SKIA_OPERATIONS_H_ #define UI_GFX_IMAGE_SKIA_OPERATIONS_H_ #include "base/gtest_prod_util.h" #include "skia/ext/image_operations.h" #include "ui/gfx/color_utils.h" #include "ui/gfx/gfx_export.h" #include "ui/gfx/shadow_value.h" #include "ui/gfx/skbitmap_operations.h" namespace gfx { class ImageSkia; class Rect; class Size; class GFX_EXPORT ImageSkiaOperations { public: // Create an image that is a blend of two others. The alpha argument // specifies the opacity of the second imag. The provided image must // use the kARGB_8888_Config config and be of equal dimensions. static ImageSkia CreateBlendedImage(const ImageSkia& first, const ImageSkia& second, double alpha); // Creates an image that is the original image with opacity set to |alpha|. static ImageSkia CreateTransparentImage(const ImageSkia& image, double alpha); // Creates new image by painting first and second image respectively. // The second image is centered in respect to the first image. static ImageSkia CreateSuperimposedImage(const ImageSkia& first, const ImageSkia& second); // Create an image that is the original image masked out by the mask defined // in the alpha image. The images must use the kARGB_8888_Config config and // be of equal dimensions. static ImageSkia CreateMaskedImage(const ImageSkia& first, const ImageSkia& alpha); // Create an image that is cropped from another image. This is special // because it tiles the original image, so your coordinates can extend // outside the bounds of the original image. static ImageSkia CreateTiledImage(const ImageSkia& image, int src_x, int src_y, int dst_w, int dst_h); // Shift an image's HSL values. The shift values are in the range of 0-1, // with the option to specify -1 for 'no change'. The shift values are // defined as: // hsl_shift[0] (hue): The absolute hue value for the image - 0 and 1 map // to 0 and 360 on the hue color wheel (red). // hsl_shift[1] (saturation): A saturation shift for the image, with the // following key values: // 0 = remove all color. // 0.5 = leave unchanged. // 1 = fully saturate the image. // hsl_shift[2] (lightness): A lightness shift for the image, with the // following key values: // 0 = remove all lightness (make all pixels black). // 0.5 = leave unchanged. // 1 = full lightness (make all pixels white). static ImageSkia CreateHSLShiftedImage(const gfx::ImageSkia& image, const color_utils::HSL& hsl_shift); // Creates a button background image by compositing the color and image // together, then applying the mask. This is a highly specialized composite // operation that is the equivalent of drawing a background in |color|, // tiling |image| over the top, and then masking the result out with |mask|. // The images must use kARGB_8888_Config config. static ImageSkia CreateButtonBackground(SkColor color, const gfx::ImageSkia& image, const gfx::ImageSkia& mask); // Returns an image which is a subset of |image| with bounds |subset_bounds|. // The |image| cannot use kA1_Config config. static ImageSkia ExtractSubset(const gfx::ImageSkia& image, const gfx::Rect& subset_bounds); // Creates an image by resizing |source| to given |target_dip_size|. static ImageSkia CreateResizedImage(const ImageSkia& source, skia::ImageOperations::ResizeMethod methd, const Size& target_dip_size); // Creates an image with drop shadow defined in |shadows| for |source|. static ImageSkia CreateImageWithDropShadow(const ImageSkia& source, const ShadowValues& shadows); // Creates an image which is a rotation of the |source|. |rotation| is the // amount of clockwise rotation in degrees. static ImageSkia CreateRotatedImage( const ImageSkia& source, SkBitmapOperations::RotationAmount rotation); private: ImageSkiaOperations(); // Class for scoping only. }; } // namespace gfx #endif // UI_GFX_IMAGE_IMAGE_SKIA_OPERATIONS_H_