• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, Hardware
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "gtest/gtest.h"
17 
18 #ifdef RS_ENABLE_GPU
19 #include "image_source.h"
20 #include "pixel_map.h"
21 #endif
22 
23 #include "draw/brush.h"
24 #include "effect/color_space.h"
25 #include "drawing/engine_adapter/impl_factory.h"
26 #include "image/bitmap.h"
27 #include "image/gpu_context.h"
28 #include "image/image.h"
29 #include "image/yuv_info.h"
30 #include "image/picture.h"
31 #include "render_context/render_context.h"
32 #include "utils/matrix.h"
33 #include "utils/size.h"
34 
35 #ifdef RS_ENABLE_VK
36 #include "platform/ohos/backend/rs_vulkan_context.h"
37 #endif
38 
39 using namespace testing;
40 using namespace testing::ext;
41 
42 namespace OHOS {
43 namespace Rosen {
44 namespace Drawing {
45 class ImageTest : public testing::Test {
46 public:
47     static void SetUpTestCase();
48     static void TearDownTestCase();
49     void SetUp() override;
50     void TearDown() override;
51 };
52 
SetUpTestCase()53 void ImageTest::SetUpTestCase()
54 {
55 #ifdef RS_ENABLE_VK
56     RsVulkanContext::SetRecyclable(false);
57 #endif
58 }
TearDownTestCase()59 void ImageTest::TearDownTestCase() {}
SetUp()60 void ImageTest::SetUp() {}
TearDown()61 void ImageTest::TearDown() {}
62 
63 // jpg
64 static unsigned char g_testJpgBuffer[] = {
65     0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01,
66     0x01, 0x01, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, 0xff, 0xdb, 0x00, 0x43,
67     0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02,
68     0x02, 0x02, 0x02, 0x03, 0x05, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0x04,
69     0x04, 0x03, 0x05, 0x07, 0x06, 0x07, 0x07, 0x07, 0x06, 0x07, 0x07, 0x08,
70     0x09, 0x0b, 0x09, 0x08, 0x08, 0x0a, 0x08, 0x07, 0x07, 0x0a, 0x0d, 0x0a,
71     0x0a, 0x0b, 0x0c, 0x0c, 0x0c, 0x0c, 0x07, 0x09, 0x0e, 0x0f, 0x0d, 0x0c,
72     0x0e, 0x0b, 0x0c, 0x0c, 0x0c, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x02, 0x02,
73     0x02, 0x03, 0x03, 0x03, 0x06, 0x03, 0x03, 0x06, 0x0c, 0x08, 0x07, 0x08,
74     0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
75     0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
76     0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
77     0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
78     0x0c, 0x0c, 0xff, 0xc0, 0x00, 0x11, 0x08, 0x00, 0xe2, 0x01, 0xd8, 0x03,
79     0x01, 0x22, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, 0xc4, 0x00,
80     0x1f, 0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
81     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
82     0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x10, 0x00,
83     0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00,
84     0x00, 0x01, 0x7d, 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21,
85     0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81,
86     0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24,
87     0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25,
88     0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a,
89     0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56,
90     0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a,
91     0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86,
92     0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
93     0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3,
94     0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6,
95     0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
96     0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1,
97     0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff, 0xc4, 0x00,
98     0x1f, 0x01, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
99     0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
100     0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x11, 0x00,
101     0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05, 0x04, 0x04, 0x00,
102     0x01, 0x02, 0x77, 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31,
103     0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08,
104     0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15,
105     0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18,
106     0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39,
107     0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55,
108     0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
109     0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84,
110     0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
111     0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa,
112     0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4,
113     0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
114     0xd8, 0xd9, 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
115     0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff, 0xda, 0x00,
116     0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0xfd,
117     0x10, 0xa2, 0x8a, 0x2b, 0xfc, 0x63, 0x3f, 0xaa, 0x02, 0x8a, 0x28, 0xa0,
118     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
119     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
120     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
121     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
122     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
123     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
124     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
125     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
126     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
127     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
128     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
129     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
130     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
131     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
132     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
133     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
134     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
135     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
136     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
137     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
138     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
139     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
140     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
141     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
142     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
143     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
144     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
145     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
146     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
147     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
148     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
149     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
150     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
151     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
152     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
153     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
154     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
155     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
156     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
157     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
158     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
159     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
160     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
161     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
162     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
163     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
164     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
165     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
166     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
167     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
168     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
169     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
170     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
171     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
172     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
173     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
174     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
175     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
176     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
177     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
178     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
179     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
180     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
181     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
182     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
183     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
184     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
185     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
186     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
187     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
188     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
189     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
190     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
191     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
192     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
193     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
194     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
195     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
196     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
197     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
198     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
199     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
200     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
201     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
202     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
203     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
204     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
205     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
206     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
207     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
208     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
209     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
210     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
211     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
212     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
213     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
214     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
215     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
216     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
217     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
218     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
219     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
220     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
221     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
222     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
223     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
224     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
225     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
226     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
227     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
228     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
229     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
230     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
231     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
232     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
233     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
234     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
235     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
236     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
237     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
238     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
239     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
240     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
241     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
242     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
243     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
244     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
245     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
246     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
247     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
248     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
249     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
250     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
251     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
252     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
253     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
254     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
255     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
256     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
257     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
258     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
259     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
260     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
261     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
262     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
263     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
264     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
265     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
266     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
267     0x02, 0x8a, 0x28, 0xa0, 0x0f, 0xff, 0xd9
268 };
269 
270 static unsigned int g_testJpgLength = 2431;
271 
272 /**
273  * @tc.name: CreateAndDestroy001
274  * @tc.desc:
275  * @tc.type: FUNC
276  * @tc.require:AR000GGNV3
277  * @tc.author:
278  */
279 HWTEST_F(ImageTest, CreateAndDestroy001, TestSize.Level1)
280 {
281     // The best way to create Image.
282     std::unique_ptr<Image> image = std::make_unique<Image>();
283     ASSERT_TRUE(image != nullptr);
284 }
285 
286 /**
287  * @tc.name: BuildFromBitmap001
288  * @tc.desc:
289  * @tc.type: FUNC
290  * @tc.require:AR000GGNV3
291  * @tc.author:
292  */
293 HWTEST_F(ImageTest, BuildFromBitmap001, TestSize.Level1)
294 {
295     std::unique_ptr<Image> image = std::make_unique<Image>();
296     ASSERT_TRUE(image != nullptr);
297     Bitmap bitmap;
298     image->BuildFromBitmap(bitmap);
299 }
300 
301 /**
302  * @tc.name: ImageGetWidthTest001
303  * @tc.desc:
304  * @tc.type: FUNC
305  * @tc.require:AR000GGNV3
306  * @tc.author:
307  */
308 HWTEST_F(ImageTest, ImageGetWidthTest001, TestSize.Level1)
309 {
310     Bitmap bitmap;
311     BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
312     bitmap.Build(10, 10, bitmapFormat);
313     Image image;
314     ASSERT_EQ(0, image.GetWidth());
315     image.BuildFromBitmap(bitmap);
316     ASSERT_EQ(10, image.GetWidth());
317 }
318 
319 /**
320  * @tc.name: ImageGetWidthTest002
321  * @tc.desc:
322  * @tc.type: FUNC
323  * @tc.require:AR000GGNV3
324  * @tc.author:
325  */
326 HWTEST_F(ImageTest, ImageGetWidthTest002, TestSize.Level1)
327 {
328     Bitmap bitmap;
329     BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
330     bitmap.Build(15, 15, bitmapFormat);
331     Image image;
332     ASSERT_EQ(0, image.GetWidth());
333     image.BuildFromBitmap(bitmap);
334     ASSERT_EQ(15, image.GetWidth());
335 }
336 
337 /**
338  * @tc.name: ImageGetHeightTest001
339  * @tc.desc:
340  * @tc.type: FUNC
341  * @tc.require:AR000GGNV3
342  * @tc.author:
343  */
344 HWTEST_F(ImageTest, ImageGetHeightTest001, TestSize.Level1)
345 {
346     Bitmap bitmap;
347     BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
348     bitmap.Build(10, 10, bitmapFormat);
349     Image image;
350     image.BuildFromBitmap(bitmap);
351     ASSERT_EQ(10, image.GetHeight());
352 }
353 
354 /**
355  * @tc.name: ImageGetHeightTest002
356  * @tc.desc:
357  * @tc.type: FUNC
358  * @tc.require:AR000GGNV3
359  * @tc.author:
360  */
361 HWTEST_F(ImageTest, ImageGetHeightTest002, TestSize.Level1)
362 {
363     Bitmap bitmap;
364     BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
365     bitmap.Build(15, 15, bitmapFormat);
366     Image image;
367     image.BuildFromBitmap(bitmap);
368     ASSERT_EQ(15, image.GetHeight());
369 }
370 
371 /**
372  * @tc.name: ImageGetUniqueIDTest001
373  * @tc.desc: test for geting the unique Id of Image.
374  * @tc.type: FUNC
375  * @tc.require: I70OWN
376  */
377 HWTEST_F(ImageTest, ImageGetUniqueIDTest001, TestSize.Level1)
378 {
379     // GetUniqueID will change all the time
380     Image image;
381     ASSERT_EQ(0, image.GetUniqueID());
382 }
383 
384 /**
385  * @tc.name: ReadPixelsTest001
386  * @tc.desc: test for Coping a Rect of pixels from Image to Bitmap.
387  * @tc.type: FUNC
388  * @tc.require: I70OWN
389  */
390 HWTEST_F(ImageTest, ReadPixelsTest001, TestSize.Level1)
391 {
392     Bitmap bitmap;
393     Image image;
394     int x = 0;
395     int y = 0;
396     EXPECT_FALSE(image.ReadPixels(bitmap, x, y));
397 }
398 
399 /**
400  * @tc.name: ReadPixelsTest002
401  * @tc.desc: test for Coping a Rect of pixels from Image to Bitmap.
402  * @tc.type: FUNC
403  * @tc.require: I70OWN
404  */
405 HWTEST_F(ImageTest, ReadPixelsTest002, TestSize.Level1)
406 {
407     Bitmap bitmap;
408     BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
409     bitmap.Build(15, 15, bitmapFormat);
410     Image image;
411     image.BuildFromBitmap(bitmap);
412     int x = 0;
413     int y = 0;
414     EXPECT_TRUE(image.ReadPixels(bitmap, x, y));
415 }
416 
417 /**
418  * @tc.name: IsTextureBackedTest001
419  * @tc.desc: test for IsTextureBacked function.
420  * @tc.type: FUNC
421  * @tc.require: I70OWN
422  */
423 HWTEST_F(ImageTest, IsTextureBackedTest001, TestSize.Level1)
424 {
425     Bitmap bitmap;
426     BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
427     bitmap.Build(15, 15, bitmapFormat);
428     Image image;
429     image.BuildFromBitmap(bitmap);
430     EXPECT_FALSE(image.IsTextureBacked());
431 }
432 
433 /**
434  * @tc.name: SetHeadroom001
435  * @tc.desc: test for setting headroom for Image.
436  * @tc.type: FUNC
437  * @tc.require: I70OWN
438 */
439 HWTEST_F(ImageTest, SetHeadroom001, TestSize.Level1)
440 {
441     std::unique_ptr<Image> image = std::make_unique<Image>();
442     ASSERT_TRUE(image != nullptr);
443     image->SetHeadroom(2.0f);
444     ASSERT_EQ(image->GetHeadroom(), 1.0f);
445 }
446 
447 /**
448  * @tc.name: GetHeadroom001
449  * @tc.desc: test for getting headroom from Image.
450  * @tc.type: FUNC
451  * @tc.require: I70OWN
452 */
453 HWTEST_F(ImageTest, GetHeadroom001, TestSize.Level1)
454 {
455     std::unique_ptr<Image> image = std::make_unique<Image>();
456     ASSERT_TRUE(image != nullptr);
457     ASSERT_EQ(image->GetHeadroom(), 1.0f);
458 }
459 
460 #ifdef RS_ENABLE_GPU
461 /**
462  * @tc.name: BuildFromCompressedTest001
463  * @tc.desc: test for creating a GPU-backed Image from compressed data.
464  * @tc.type: FUNC
465  * @tc.require: I70OWN
466  */
467 HWTEST_F(ImageTest, BuildFromCompressedTest001, TestSize.Level1)
468 {
469     GPUContext gpuContext;
470     const std::shared_ptr<Data> data = nullptr;
471     std::unique_ptr<Image> image = std::make_unique<Image>();
472     ASSERT_TRUE(image != nullptr);
473     image->BuildFromCompressed(gpuContext, data, 15, 15, CompressedType::ASTC_RGBA8_4x4);
474 }
475 
476 /**
477  * @tc.name: BuildFromCompressedTest002
478  * @tc.desc: test for creating a GPU-backed Image from compressed data.
479  * @tc.type: FUNC
480  * @tc.require: I70OWN
481  */
482 HWTEST_F(ImageTest, BuildFromCompressedTest002, TestSize.Level1)
483 {
484     GPUContext gpuContext;
485     std::shared_ptr<Data> data = std::make_shared<Data>();
486     ASSERT_TRUE(data != nullptr);
487     std::unique_ptr<Image> image = std::make_unique<Image>();
488     ASSERT_TRUE(image != nullptr);
489     image->BuildFromCompressed(gpuContext, data, 15, 15, CompressedType::ASTC_RGBA8_4x4);
490 }
491 
492 /**
493  * @tc.name: BuildFromCompressedTest003
494  * @tc.desc: test for creating a GPU-backed Image from compressed data.
495  * @tc.type: FUNC
496  * @tc.require: I70OWN
497  */
498 HWTEST_F(ImageTest, BuildFromCompressedTest003, TestSize.Level1)
499 {
500     GPUContext gpuContext;
501     std::shared_ptr<Data> data = std::make_shared<Data>();
502     ASSERT_TRUE(data != nullptr);
503     std::unique_ptr<Image> image = std::make_unique<Image>();
504     ASSERT_TRUE(image != nullptr);
505     image->BuildFromCompressed(gpuContext, data, 15, 15, CompressedType::ETC2_RGB8_UNORM);
506 }
507 
508 /**
509  * @tc.name: BuildFromBitmapTest001
510  * @tc.desc: test for creating Image from Bitmap. Image is uploaded to GPU back-end using context.
511  * @tc.type: FUNC
512  * @tc.require: I70OWN
513  */
514 HWTEST_F(ImageTest, BuildFromBitmapTest001, TestSize.Level1)
515 {
516     GPUContext gpuContext;
517     Bitmap bitmap;
518     BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
519     bitmap.Build(15, 15, bitmapFormat);
520     std::unique_ptr<Image> image = std::make_unique<Image>();
521     ASSERT_TRUE(image != nullptr);
522     image->BuildFromBitmap(gpuContext, bitmap);
523 }
524 
525 /**
526  * @tc.name: BuildFromTextureTest001
527  * @tc.desc: test for creating Image from GPU texture associated with context.
528  * @tc.type: FUNC
529  * @tc.require: I70OWN
530  */
531 HWTEST_F(ImageTest, BuildFromTextureTest001, TestSize.Level1)
532 {
533     GPUContext gpuContext;
534     TextureInfo info;
535     info.SetWidth(10);
536     BitmapFormat bitmapFormat { COLORTYPE_UNKNOWN, ALPHATYPE_UNKNOWN };
537     auto colorSpace = std::make_shared<ColorSpace>(ColorSpace::ColorSpaceType::NO_TYPE);
538     std::unique_ptr<Image> image = std::make_unique<Image>();
539     ASSERT_TRUE(image != nullptr);
540     image->BuildFromTexture(gpuContext, info, TextureOrigin::TOP_LEFT, bitmapFormat, nullptr);
541 
542     bitmapFormat = { COLORTYPE_ALPHA_8, ALPHATYPE_OPAQUE };
543     image->BuildFromTexture(gpuContext, info, TextureOrigin::TOP_LEFT, bitmapFormat, colorSpace);
544 
545     bitmapFormat = { COLORTYPE_RGB_565, ALPHATYPE_PREMUL };
546     image->BuildFromTexture(gpuContext, info, TextureOrigin::BOTTOM_LEFT, bitmapFormat, colorSpace);
547 
548     bitmapFormat = { COLORTYPE_ARGB_4444, ALPHATYPE_UNPREMUL };
549     image->BuildFromTexture(gpuContext, info, TextureOrigin::BOTTOM_LEFT, bitmapFormat, colorSpace);
550 
551     bitmapFormat.colorType = COLORTYPE_RGBA_8888;
552     bitmapFormat.alphaType = static_cast<AlphaType>(-1);
553     image->BuildFromTexture(gpuContext, info, TextureOrigin::BOTTOM_LEFT, bitmapFormat, colorSpace);
554 
555     bitmapFormat.colorType = COLORTYPE_BGRA_8888;
556     image->BuildFromTexture(gpuContext, info, TextureOrigin::BOTTOM_LEFT, bitmapFormat, colorSpace);
557 
558     bitmapFormat.colorType = COLORTYPE_N32;
559     image->BuildFromTexture(gpuContext, info, TextureOrigin::BOTTOM_LEFT, bitmapFormat, colorSpace);
560 
561     bitmapFormat.colorType = static_cast<ColorType>(-1);
562     image->BuildFromTexture(gpuContext, info, static_cast<TextureOrigin>(-1), bitmapFormat, colorSpace);
563 }
564 
565 /**
566  * @tc.name: SerializeAndDeserializeTest001
567  * @tc.desc: test for serialize and deserialize Image.
568  * @tc.type: FUNC
569  * @tc.require: I782P9
570  */
571 HWTEST_F(ImageTest, SerializeAndDeserializeTest001, TestSize.Level1)
572 {
573     auto image = std::make_shared<Image>();
574     auto data = image->Serialize();
575 #ifdef ROSEN_OHOS
576     ASSERT_TRUE(data == nullptr);
577     EXPECT_FALSE(image->Deserialize(data));
578 
579     BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
580     auto bitmap = std::make_shared<Bitmap>();
581     EXPECT_TRUE(bitmap->Build(10, 10, bitmapFormat));
582     image->BuildFromBitmap(*bitmap);
583     data = image->Serialize();
584     ASSERT_TRUE(data != nullptr);
585     EXPECT_TRUE(image->Deserialize(data));
586 #else
587     ASSERT_TRUE(data == nullptr);
588     EXPECT_FALSE(image->Deserialize(data));
589 #endif
590 }
591 
592 /**
593  * @tc.name: MakeFromYUVAPixmapsTest001
594  * @tc.desc: test for MakeFromYUVAPixmapsTest failed with nullptr gpuContext.
595  * @tc.type: FUNC
596  * @tc.require: I782P9
597  */
598 HWTEST_F(ImageTest, MakeFromYUVAPixmapsTest001, TestSize.Level1)
599 {
600     GPUContext gpuContext;
601     YUVInfo info(100, 100, YUVInfo::PlaneConfig::Y_UV, YUVInfo::SubSampling::K420,
602         YUVInfo::YUVColorSpace::JPEG_FULL_YUVCOLORSPACE,
603         YUVInfo::YUVDataType::UNORM_8);
604     auto image = Image::MakeFromYUVAPixmaps(gpuContext, info, nullptr);
605     EXPECT_TRUE(image == nullptr);
606 }
607 
608 /**
609  * @tc.name: MakeFromYUVAPixmapsTest002
610  * @tc.desc: test for MakeFromYUVAPixmapsTest failed with nullptr memory.
611  * @tc.type: FUNC
612  * @tc.require: I782P9
613  */
614 HWTEST_F(ImageTest, MakeFromYUVAPixmapsTest002, TestSize.Level1)
615 {
616     auto renderContext = std::make_shared<RenderContext>();
617     renderContext->InitializeEglContext();
618     renderContext->SetUpGpuContext();
619     auto gpuContext = renderContext->GetSharedDrGPUContext();
620     ASSERT_NE(gpuContext, nullptr);
621 
622     YUVInfo info(100, 100, YUVInfo::PlaneConfig::Y_UV, YUVInfo::SubSampling::K420,
623         YUVInfo::YUVColorSpace::JPEG_FULL_YUVCOLORSPACE,
624         YUVInfo::YUVDataType::UNORM_8);
625     auto image = Image::MakeFromYUVAPixmaps(*gpuContext, info, nullptr);
626     EXPECT_TRUE(image == nullptr);
627     gpuContext = nullptr;
628 }
629 
630 /**
631  * @tc.name: MakeFromYUVAPixmapsTest003
632  * @tc.desc: test for MakeFromYUVAPixmapsTest success for YUV NV21.
633  * @tc.type: FUNC
634  * @tc.require: I782P9
635  */
636 HWTEST_F(ImageTest, MakeFromYUVAPixmapsTest003, TestSize.Level1)
637 {
638     auto renderContext = std::make_shared<RenderContext>();
639     renderContext->InitializeEglContext();
640     renderContext->SetUpGpuContext();
641     auto gpuContext = renderContext->GetSharedDrGPUContext();
642     ASSERT_NE(gpuContext, nullptr);
643 
644     size_t bufferSize = g_testJpgLength;
645     uint8_t *buffer = g_testJpgBuffer;
646     uint32_t errorCode = 0;
647     Media::SourceOptions opts;
648     opts.formatHint = "image/jpeg";
649     std::unique_ptr<Media::ImageSource> imageSource = Media::ImageSource::CreateImageSource(buffer,
650         bufferSize, opts, errorCode);
651     ASSERT_NE(imageSource.get(), nullptr);
652     Media::DecodeOptions decodeOpts;
653     decodeOpts.desiredPixelFormat = Media::PixelFormat::NV21;
654     std::unique_ptr<Media::PixelMap> pixelMap = imageSource->CreatePixelMap(decodeOpts, errorCode);
655     ASSERT_NE(pixelMap.get(), nullptr);
656 
657     YUVInfo info(300, 300, YUVInfo::PlaneConfig::Y_VU, YUVInfo::SubSampling::K420,
658         YUVInfo::YUVColorSpace::JPEG_FULL_YUVCOLORSPACE,
659         YUVInfo::YUVDataType::UNORM_8);
660     auto image = Image::MakeFromYUVAPixmaps(*gpuContext, info,
661         const_cast<void *>(reinterpret_cast<const void*>(pixelMap->GetPixels())));
662     EXPECT_TRUE(image != nullptr);
663     gpuContext = nullptr;
664 }
665 
666 /**
667  * @tc.name: MakeFromYUVAPixmapsTest004
668  * @tc.desc: test for MakeFromYUVAPixmapsTest success for YUV NV12.
669  * @tc.type: FUNC
670  * @tc.require: I782P9
671  */
672 HWTEST_F(ImageTest, MakeFromYUVAPixmapsTest004, TestSize.Level1)
673 {
674     auto renderContext = std::make_shared<RenderContext>();
675     renderContext->InitializeEglContext();
676     renderContext->SetUpGpuContext();
677     auto gpuContext = renderContext->GetSharedDrGPUContext();
678     ASSERT_NE(gpuContext, nullptr);
679 
680     size_t bufferSize = g_testJpgLength;
681     uint8_t *buffer = g_testJpgBuffer;
682     uint32_t errorCode = 0;
683     Media::SourceOptions opts;
684     opts.formatHint = "image/jpeg";
685     std::unique_ptr<Media::ImageSource> imageSource = Media::ImageSource::CreateImageSource(buffer,
686         bufferSize, opts, errorCode);
687     ASSERT_NE(imageSource.get(), nullptr);
688     Media::DecodeOptions decodeOpts;
689     decodeOpts.desiredPixelFormat = Media::PixelFormat::NV12;
690     std::unique_ptr<Media::PixelMap> pixelMap = imageSource->CreatePixelMap(decodeOpts, errorCode);
691     ASSERT_NE(pixelMap.get(), nullptr);
692 
693     YUVInfo info(300, 300, YUVInfo::PlaneConfig::Y_UV, YUVInfo::SubSampling::K420,
694         YUVInfo::YUVColorSpace::JPEG_FULL_YUVCOLORSPACE,
695         YUVInfo::YUVDataType::UNORM_8);
696     auto image = Image::MakeFromYUVAPixmaps(*gpuContext, info,
697         const_cast<void *>(reinterpret_cast<const void*>(pixelMap->GetPixels())));
698     EXPECT_TRUE(image != nullptr);
699     gpuContext = nullptr;
700 }
701 
702 /**
703  * @tc.name: MakeFromYUVAPixmapsTest005
704  * @tc.desc: test for MakeFromYUVAPixmapsTest success for YUV YCBCR_P010.
705  * @tc.type: FUNC
706  * @tc.require: I782P9
707  */
708 HWTEST_F(ImageTest, MakeFromYUVAPixmapsTest005, TestSize.Level1)
709 {
710     auto renderContext = std::make_shared<RenderContext>();
711     renderContext->InitializeEglContext();
712     renderContext->SetUpGpuContext();
713     auto gpuContext = renderContext->GetSharedDrGPUContext();
714     ASSERT_NE(gpuContext, nullptr);
715 
716     size_t bufferSize = g_testJpgLength;
717     uint8_t *buffer = g_testJpgBuffer;
718     uint32_t errorCode = 0;
719     Media::SourceOptions opts;
720     opts.formatHint = "image/jpeg";
721     std::unique_ptr<Media::ImageSource> imageSource = Media::ImageSource::CreateImageSource(buffer,
722         bufferSize, opts, errorCode);
723     ASSERT_NE(imageSource.get(), nullptr);
724     Media::DecodeOptions decodeOpts;
725     decodeOpts.desiredPixelFormat = Media::PixelFormat::YCBCR_P010;
726     std::unique_ptr<Media::PixelMap> pixelMap = imageSource->CreatePixelMap(decodeOpts, errorCode);
727     ASSERT_NE(pixelMap.get(), nullptr);
728 
729     YUVInfo info(300, 300, YUVInfo::PlaneConfig::Y_UV, YUVInfo::SubSampling::K420,
730         YUVInfo::YUVColorSpace::BT2020_10BIT_LIMITED_YUVCOLORSPACE,
731         YUVInfo::YUVDataType::UNORM_16);
732     auto image = Image::MakeFromYUVAPixmaps(*gpuContext, info,
733         const_cast<void *>(reinterpret_cast<const void*>(pixelMap->GetPixels())));
734     EXPECT_TRUE(image != nullptr);
735     gpuContext = nullptr;
736 }
737 
738 /**
739  * @tc.name: MakeFromYUVAPixmapsTest006
740  * @tc.desc: test for MakeFromYUVAPixmapsTest success for YUV YCRCB_P010.
741  * @tc.type: FUNC
742  * @tc.require: I782P9
743  */
744 HWTEST_F(ImageTest, MakeFromYUVAPixmapsTest006, TestSize.Level1)
745 {
746     auto renderContext = std::make_shared<RenderContext>();
747     renderContext->InitializeEglContext();
748     renderContext->SetUpGpuContext();
749     auto gpuContext = renderContext->GetSharedDrGPUContext();
750     ASSERT_NE(gpuContext, nullptr);
751 
752     size_t bufferSize = g_testJpgLength;
753     uint8_t *buffer = g_testJpgBuffer;
754     uint32_t errorCode = 0;
755     Media::SourceOptions opts;
756     opts.formatHint = "image/jpeg";
757     std::unique_ptr<Media::ImageSource> imageSource = Media::ImageSource::CreateImageSource(buffer,
758         bufferSize, opts, errorCode);
759     ASSERT_NE(imageSource.get(), nullptr);
760     Media::DecodeOptions decodeOpts;
761     decodeOpts.desiredPixelFormat = Media::PixelFormat::YCRCB_P010;
762     std::unique_ptr<Media::PixelMap> pixelMap = imageSource->CreatePixelMap(decodeOpts, errorCode);
763     ASSERT_NE(pixelMap.get(), nullptr);
764 
765     YUVInfo info(300, 300, YUVInfo::PlaneConfig::Y_VU, YUVInfo::SubSampling::K420,
766         YUVInfo::YUVColorSpace::BT2020_10BIT_LIMITED_YUVCOLORSPACE,
767         YUVInfo::YUVDataType::UNORM_16);
768     auto image = Image::MakeFromYUVAPixmaps(*gpuContext, info,
769         const_cast<void *>(reinterpret_cast<const void*>(pixelMap->GetPixels())));
770     EXPECT_TRUE(image != nullptr);
771     gpuContext = nullptr;
772 }
773 
774 #endif
775 } // namespace Drawing
776 } // namespace Rosen
777 } // namespace OHOS