[dali_1.9.29] Merge branch 'devel/master'
[platform/core/uifw/dali-core.git] / dali / public-api / images / image-operations.h
1 #ifndef DALI_IMAGE_OPERATIONS_H
2 #define DALI_IMAGE_OPERATIONS_H
3
4 /*
5  * Copyright (c) 2020 Samsung Electronics Co., Ltd.
6  *
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
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
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.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22
23 // INTERNAL INCLUDES
24 #include <dali/public-api/math/uint-16-pair.h>
25
26 namespace Dali
27 {
28 /**
29  * @addtogroup dali_core_images
30  * @{
31  */
32
33 /**
34  * @brief The integer dimensions of an image or a region of an image packed into
35  *        16 bits per component.
36  *
37  * This can only be used for images of up to 65535 x 65535 pixels.
38  * @SINCE_1_0.0
39  */
40 using ImageDimensions = Dali::Uint16Pair;
41
42 /**
43  * @brief Fitting options, used when resizing images to fit desired dimensions.
44  *
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.
48  * @SINCE_1_0.0
49  */
50 namespace FittingMode
51 {
52 /**
53    * @brief Enumeration for FittingMode type.
54    * @SINCE_1_0.0
55    */
56 enum Type
57 {
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
60                  ///  pixels.
61                  ///  @SINCE_1_0.0
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.
66                  ///  @SINCE_1_0.0
67   FIT_WIDTH,     ///< Image fills whole width. Height is scaled proportionately to
68                  ///  maintain aspect ratio.
69                  ///  @SINCE_1_0.0
70   FIT_HEIGHT     ///< Image fills whole height. Width is scaled proportionately to
71                  ///  maintain aspect ratio.
72                  ///  @SINCE_1_0.0
73 };
74 const Type DEFAULT = SHRINK_TO_FIT;
75 } // namespace FittingMode
76
77 /**
78  * @brief Filtering options, used when resizing images to sample original pixels.
79  *
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.
82  *
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.
87  * @SINCE_1_0.0
88  */
89 namespace SamplingMode
90 {
91 /**
92    * @brief Enumeration for SamplingMode type.
93    * @SINCE_1_0.0
94    */
95 enum Type
96 {
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.
100                     ///  @SINCE_1_0.0
101   NEAREST,          ///< For each output pixel, read one input pixel.
102                     ///  @SINCE_1_0.0
103   LINEAR,           ///< For each output pixel, read a quad of four input pixels
104                     ///  and write a weighted average of them.
105                     ///  @SINCE_1_0.0
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.
110                     ///  @SINCE_1_0.0
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.
114                     ///  @SINCE_1_0.0
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.
118                     ///  @SINCE_1_0.0
119   DONT_CARE         ///< For caching algorithms where a client strongly prefers a
120                     ///  cache-hit to reuse a cached image.
121                     ///  @SINCE_1_0.0
122 };
123 const Type DEFAULT = BOX;
124 } // namespace SamplingMode
125
126 /**
127  * @}
128  */
129 } // namespace Dali
130
131 #endif // DALI_IMAGE_OPERATIONS_H