1 #ifndef DALI_IMAGE_OPERATIONS_H
2 #define DALI_IMAGE_OPERATIONS_H
5 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
24 #include <dali/public-api/math/uint-16-pair.h>
29 * @addtogroup dali_core_images
34 * @brief The integer dimensions of an image or a region of an image packed into
35 * 16 bits per component.
37 * This can only be used for images of up to 65535 x 65535 pixels.
40 using ImageDimensions = Dali::Uint16Pair;
43 * @brief Fitting options, used when resizing images to fit desired dimensions.
45 * A fitting mode controls the region of a loaded image to be mapped to the
46 * desired image rectangle.
47 * All fitting modes preserve the aspect ratio of the image contents.
53 * @brief Enumeration for FittingMode type.
58 SHRINK_TO_FIT, ///< Fit full image inside desired width & height, potentially not
59 /// filling one of either the desired image width or height with
62 SCALE_TO_FILL, ///< Image fills whole desired width & height with image data. The
63 /// image is centred in the desired dimensions, exactly touching
64 /// in one dimension, with image regions outside the other desired
65 /// dimension cropped away.
67 FIT_WIDTH, ///< Image fills whole width. Height is scaled proportionately to
68 /// maintain aspect ratio.
70 FIT_HEIGHT ///< Image fills whole height. Width is scaled proportionately to
71 /// maintain aspect ratio.
74 const Type DEFAULT = SHRINK_TO_FIT;
75 } // namespace FittingMode
78 * @brief Filtering options, used when resizing images to sample original pixels.
80 * A SamplingMode controls how pixels in an input image are sampled and
81 * combined to generate each pixel of a destination image during a scaling.
83 * NoFilter and Box modes do not guarantee that the output pixel array
84 * exactly matches the rectangle specified by the desired dimensions and
85 * FittingMode, but all other filter modes do if the desired dimensions are
86 * `<=` the raw dimensions of the input image file.
89 namespace SamplingMode
92 * @brief Enumeration for SamplingMode type.
97 BOX, ///< Iteratively box filter to generate an image of 1/2, 1/4,
98 /// 1/8, etc width and height and approximately the desired
99 /// size. This is the default.
101 NEAREST, ///< For each output pixel, read one input pixel.
103 LINEAR, ///< For each output pixel, read a quad of four input pixels
104 /// and write a weighted average of them.
106 BOX_THEN_NEAREST, ///< Iteratively box filter to generate an image of 1/2, 1/4,
107 /// 1/8 etc width and height and approximately the desired
108 /// size, then for each output pixel, read one pixel from the
109 /// last level of box filtering.
111 BOX_THEN_LINEAR, ///< Iteratively box filter to almost the right size, then for
112 /// each output pixel, read four pixels from the last level of
113 /// box filtering and write their weighted average.
115 NO_FILTER, ///< No filtering is performed. If the SCALE_TO_FILL scaling mode
116 /// is enabled, the borders of the image may be trimmed to
117 /// match the aspect ratio of the desired dimensions.
119 DONT_CARE ///< For caching algorithms where a client strongly prefers a
120 /// cache-hit to reuse a cached image.
123 const Type DEFAULT = BOX;
124 } // namespace SamplingMode
131 #endif // DALI_IMAGE_OPERATIONS_H