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 using namespace testing;
36 using namespace testing::ext;
37 
38 namespace OHOS {
39 namespace Rosen {
40 namespace Drawing {
41 class ImageTest : public testing::Test {
42 public:
43     static void SetUpTestCase();
44     static void TearDownTestCase();
45     void SetUp() override;
46     void TearDown() override;
47 };
48 
SetUpTestCase()49 void ImageTest::SetUpTestCase() {}
TearDownTestCase()50 void ImageTest::TearDownTestCase() {}
SetUp()51 void ImageTest::SetUp() {}
TearDown()52 void ImageTest::TearDown() {}
53 
54 // jpg
55 static unsigned char g_testJpgBuffer[] = {
56     0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01,
57     0x01, 0x01, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, 0xff, 0xdb, 0x00, 0x43,
58     0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02,
59     0x02, 0x02, 0x02, 0x03, 0x05, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0x04,
60     0x04, 0x03, 0x05, 0x07, 0x06, 0x07, 0x07, 0x07, 0x06, 0x07, 0x07, 0x08,
61     0x09, 0x0b, 0x09, 0x08, 0x08, 0x0a, 0x08, 0x07, 0x07, 0x0a, 0x0d, 0x0a,
62     0x0a, 0x0b, 0x0c, 0x0c, 0x0c, 0x0c, 0x07, 0x09, 0x0e, 0x0f, 0x0d, 0x0c,
63     0x0e, 0x0b, 0x0c, 0x0c, 0x0c, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x02, 0x02,
64     0x02, 0x03, 0x03, 0x03, 0x06, 0x03, 0x03, 0x06, 0x0c, 0x08, 0x07, 0x08,
65     0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
66     0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
67     0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
68     0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
69     0x0c, 0x0c, 0xff, 0xc0, 0x00, 0x11, 0x08, 0x00, 0xe2, 0x01, 0xd8, 0x03,
70     0x01, 0x22, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, 0xc4, 0x00,
71     0x1f, 0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
72     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
73     0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x10, 0x00,
74     0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00,
75     0x00, 0x01, 0x7d, 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21,
76     0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81,
77     0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24,
78     0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25,
79     0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a,
80     0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56,
81     0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a,
82     0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86,
83     0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
84     0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3,
85     0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6,
86     0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
87     0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1,
88     0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff, 0xc4, 0x00,
89     0x1f, 0x01, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
90     0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
91     0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x11, 0x00,
92     0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05, 0x04, 0x04, 0x00,
93     0x01, 0x02, 0x77, 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31,
94     0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08,
95     0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15,
96     0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18,
97     0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39,
98     0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55,
99     0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
100     0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84,
101     0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
102     0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa,
103     0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4,
104     0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
105     0xd8, 0xd9, 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
106     0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff, 0xda, 0x00,
107     0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0xfd,
108     0x10, 0xa2, 0x8a, 0x2b, 0xfc, 0x63, 0x3f, 0xaa, 0x02, 0x8a, 0x28, 0xa0,
109     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
110     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
111     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
112     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
113     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
114     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
115     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
116     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
117     0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 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, 0x0f, 0xff, 0xd9
259 };
260 
261 static unsigned int g_testJpgLength = 2431;
262 
263 /**
264  * @tc.name: CreateAndDestroy001
265  * @tc.desc:
266  * @tc.type: FUNC
267  * @tc.require:AR000GGNV3
268  * @tc.author:
269  */
270 HWTEST_F(ImageTest, CreateAndDestroy001, TestSize.Level1)
271 {
272     // The best way to create Image.
273     std::unique_ptr<Image> image = std::make_unique<Image>();
274     ASSERT_TRUE(image != nullptr);
275 }
276 
277 /**
278  * @tc.name: BuildFromBitmap001
279  * @tc.desc:
280  * @tc.type: FUNC
281  * @tc.require:AR000GGNV3
282  * @tc.author:
283  */
284 HWTEST_F(ImageTest, BuildFromBitmap001, TestSize.Level1)
285 {
286     std::unique_ptr<Image> image = std::make_unique<Image>();
287     ASSERT_TRUE(image != nullptr);
288     Bitmap bitmap;
289     image->BuildFromBitmap(bitmap);
290 }
291 
292 /**
293  * @tc.name: ImageGetWidthTest001
294  * @tc.desc:
295  * @tc.type: FUNC
296  * @tc.require:AR000GGNV3
297  * @tc.author:
298  */
299 HWTEST_F(ImageTest, ImageGetWidthTest001, TestSize.Level1)
300 {
301     Bitmap bitmap;
302     BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
303     bitmap.Build(10, 10, bitmapFormat);
304     Image image;
305     ASSERT_EQ(0, image.GetWidth());
306     image.BuildFromBitmap(bitmap);
307     ASSERT_EQ(10, image.GetWidth());
308 }
309 
310 /**
311  * @tc.name: ImageGetWidthTest002
312  * @tc.desc:
313  * @tc.type: FUNC
314  * @tc.require:AR000GGNV3
315  * @tc.author:
316  */
317 HWTEST_F(ImageTest, ImageGetWidthTest002, TestSize.Level1)
318 {
319     Bitmap bitmap;
320     BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
321     bitmap.Build(15, 15, bitmapFormat);
322     Image image;
323     ASSERT_EQ(0, image.GetWidth());
324     image.BuildFromBitmap(bitmap);
325     ASSERT_EQ(15, image.GetWidth());
326 }
327 
328 /**
329  * @tc.name: ImageGetHeightTest001
330  * @tc.desc:
331  * @tc.type: FUNC
332  * @tc.require:AR000GGNV3
333  * @tc.author:
334  */
335 HWTEST_F(ImageTest, ImageGetHeightTest001, TestSize.Level1)
336 {
337     Bitmap bitmap;
338     BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
339     bitmap.Build(10, 10, bitmapFormat);
340     Image image;
341     image.BuildFromBitmap(bitmap);
342     ASSERT_EQ(10, image.GetHeight());
343 }
344 
345 /**
346  * @tc.name: ImageGetHeightTest002
347  * @tc.desc:
348  * @tc.type: FUNC
349  * @tc.require:AR000GGNV3
350  * @tc.author:
351  */
352 HWTEST_F(ImageTest, ImageGetHeightTest002, TestSize.Level1)
353 {
354     Bitmap bitmap;
355     BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
356     bitmap.Build(15, 15, bitmapFormat);
357     Image image;
358     image.BuildFromBitmap(bitmap);
359     ASSERT_EQ(15, image.GetHeight());
360 }
361 
362 /**
363  * @tc.name: ImageGetUniqueIDTest001
364  * @tc.desc: test for geting the unique Id of Image.
365  * @tc.type: FUNC
366  * @tc.require: I70OWN
367  */
368 HWTEST_F(ImageTest, ImageGetUniqueIDTest001, TestSize.Level1)
369 {
370     // GetUniqueID will change all the time
371     Image image;
372     ASSERT_EQ(0, image.GetUniqueID());
373 }
374 
375 /**
376  * @tc.name: ReadPixelsTest001
377  * @tc.desc: test for Coping a Rect of pixels from Image to Bitmap.
378  * @tc.type: FUNC
379  * @tc.require: I70OWN
380  */
381 HWTEST_F(ImageTest, ReadPixelsTest001, TestSize.Level1)
382 {
383     Bitmap bitmap;
384     Image image;
385     int x = 0;
386     int y = 0;
387     EXPECT_FALSE(image.ReadPixels(bitmap, x, y));
388 }
389 
390 /**
391  * @tc.name: ReadPixelsTest002
392  * @tc.desc: test for Coping a Rect of pixels from Image to Bitmap.
393  * @tc.type: FUNC
394  * @tc.require: I70OWN
395  */
396 HWTEST_F(ImageTest, ReadPixelsTest002, TestSize.Level1)
397 {
398     Bitmap bitmap;
399     BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
400     bitmap.Build(15, 15, bitmapFormat);
401     Image image;
402     image.BuildFromBitmap(bitmap);
403     int x = 0;
404     int y = 0;
405     EXPECT_TRUE(image.ReadPixels(bitmap, x, y));
406 }
407 
408 /**
409  * @tc.name: IsTextureBackedTest001
410  * @tc.desc: test for IsTextureBacked function.
411  * @tc.type: FUNC
412  * @tc.require: I70OWN
413  */
414 HWTEST_F(ImageTest, IsTextureBackedTest001, TestSize.Level1)
415 {
416     Bitmap bitmap;
417     BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
418     bitmap.Build(15, 15, bitmapFormat);
419     Image image;
420     image.BuildFromBitmap(bitmap);
421     EXPECT_FALSE(image.IsTextureBacked());
422 }
423 
424 #ifdef RS_ENABLE_GPU
425 /**
426  * @tc.name: BuildFromCompressedTest001
427  * @tc.desc: test for creating a GPU-backed Image from compressed data.
428  * @tc.type: FUNC
429  * @tc.require: I70OWN
430  */
431 HWTEST_F(ImageTest, BuildFromCompressedTest001, TestSize.Level1)
432 {
433     GPUContext gpuContext;
434     const std::shared_ptr<Data> data = nullptr;
435     std::unique_ptr<Image> image = std::make_unique<Image>();
436     ASSERT_TRUE(image != nullptr);
437     image->BuildFromCompressed(gpuContext, data, 15, 15, CompressedType::ASTC_RGBA8_4x4);
438 }
439 
440 /**
441  * @tc.name: BuildFromCompressedTest002
442  * @tc.desc: test for creating a GPU-backed Image from compressed data.
443  * @tc.type: FUNC
444  * @tc.require: I70OWN
445  */
446 HWTEST_F(ImageTest, BuildFromCompressedTest002, TestSize.Level1)
447 {
448     GPUContext gpuContext;
449     std::shared_ptr<Data> data = std::make_shared<Data>();
450     ASSERT_TRUE(data != nullptr);
451     std::unique_ptr<Image> image = std::make_unique<Image>();
452     ASSERT_TRUE(image != nullptr);
453     image->BuildFromCompressed(gpuContext, data, 15, 15, CompressedType::ASTC_RGBA8_4x4);
454 }
455 
456 /**
457  * @tc.name: BuildFromCompressedTest003
458  * @tc.desc: test for creating a GPU-backed Image from compressed data.
459  * @tc.type: FUNC
460  * @tc.require: I70OWN
461  */
462 HWTEST_F(ImageTest, BuildFromCompressedTest003, TestSize.Level1)
463 {
464     GPUContext gpuContext;
465     std::shared_ptr<Data> data = std::make_shared<Data>();
466     ASSERT_TRUE(data != nullptr);
467     std::unique_ptr<Image> image = std::make_unique<Image>();
468     ASSERT_TRUE(image != nullptr);
469     image->BuildFromCompressed(gpuContext, data, 15, 15, CompressedType::ETC2_RGB8_UNORM);
470 }
471 
472 /**
473  * @tc.name: BuildFromBitmapTest001
474  * @tc.desc: test for creating Image from Bitmap. Image is uploaded to GPU back-end using context.
475  * @tc.type: FUNC
476  * @tc.require: I70OWN
477  */
478 HWTEST_F(ImageTest, BuildFromBitmapTest001, TestSize.Level1)
479 {
480     GPUContext gpuContext;
481     Bitmap bitmap;
482     BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
483     bitmap.Build(15, 15, bitmapFormat);
484     std::unique_ptr<Image> image = std::make_unique<Image>();
485     ASSERT_TRUE(image != nullptr);
486     image->BuildFromBitmap(gpuContext, bitmap);
487 }
488 
489 /**
490  * @tc.name: BuildFromTextureTest001
491  * @tc.desc: test for creating Image from GPU texture associated with context.
492  * @tc.type: FUNC
493  * @tc.require: I70OWN
494  */
495 HWTEST_F(ImageTest, BuildFromTextureTest001, TestSize.Level1)
496 {
497     GPUContext gpuContext;
498     TextureInfo info;
499     info.SetWidth(10);
500     BitmapFormat bitmapFormat { COLORTYPE_UNKNOWN, ALPHATYPE_UNKNOWN };
501     auto colorSpace = std::make_shared<ColorSpace>(ColorSpace::ColorSpaceType::NO_TYPE);
502     std::unique_ptr<Image> image = std::make_unique<Image>();
503     ASSERT_TRUE(image != nullptr);
504     image->BuildFromTexture(gpuContext, info, TextureOrigin::TOP_LEFT, bitmapFormat, nullptr);
505 
506     bitmapFormat = { COLORTYPE_ALPHA_8, ALPHATYPE_OPAQUE };
507     image->BuildFromTexture(gpuContext, info, TextureOrigin::TOP_LEFT, bitmapFormat, colorSpace);
508 
509     bitmapFormat = { COLORTYPE_RGB_565, ALPHATYPE_PREMUL };
510     image->BuildFromTexture(gpuContext, info, TextureOrigin::BOTTOM_LEFT, bitmapFormat, colorSpace);
511 
512     bitmapFormat = { COLORTYPE_ARGB_4444, ALPHATYPE_UNPREMUL };
513     image->BuildFromTexture(gpuContext, info, TextureOrigin::BOTTOM_LEFT, bitmapFormat, colorSpace);
514 
515     bitmapFormat.colorType = COLORTYPE_RGBA_8888;
516     bitmapFormat.alphaType = static_cast<AlphaType>(-1);
517     image->BuildFromTexture(gpuContext, info, TextureOrigin::BOTTOM_LEFT, bitmapFormat, colorSpace);
518 
519     bitmapFormat.colorType = COLORTYPE_BGRA_8888;
520     image->BuildFromTexture(gpuContext, info, TextureOrigin::BOTTOM_LEFT, bitmapFormat, colorSpace);
521 
522     bitmapFormat.colorType = COLORTYPE_N32;
523     image->BuildFromTexture(gpuContext, info, TextureOrigin::BOTTOM_LEFT, bitmapFormat, colorSpace);
524 
525     bitmapFormat.colorType = static_cast<ColorType>(-1);
526     image->BuildFromTexture(gpuContext, info, static_cast<TextureOrigin>(-1), bitmapFormat, colorSpace);
527 }
528 
529 /**
530  * @tc.name: SerializeAndDeserializeTest001
531  * @tc.desc: test for serialize and deserialize Image.
532  * @tc.type: FUNC
533  * @tc.require: I782P9
534  */
535 HWTEST_F(ImageTest, SerializeAndDeserializeTest001, TestSize.Level1)
536 {
537     auto image = std::make_shared<Image>();
538     auto data = image->Serialize();
539 #ifdef ROSEN_OHOS
540     ASSERT_TRUE(data == nullptr);
541     EXPECT_FALSE(image->Deserialize(data));
542 
543     BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
544     auto bitmap = std::make_shared<Bitmap>();
545     EXPECT_TRUE(bitmap->Build(10, 10, bitmapFormat));
546     image->BuildFromBitmap(*bitmap);
547     data = image->Serialize();
548     ASSERT_TRUE(data != nullptr);
549     EXPECT_TRUE(image->Deserialize(data));
550 #else
551     ASSERT_TRUE(data == nullptr);
552     EXPECT_FALSE(image->Deserialize(data));
553 #endif
554 }
555 
556 /**
557  * @tc.name: MakeFromYUVAPixmapsTest001
558  * @tc.desc: test for MakeFromYUVAPixmapsTest failed with nullptr gpuContext.
559  * @tc.type: FUNC
560  * @tc.require: I782P9
561  */
562 HWTEST_F(ImageTest, MakeFromYUVAPixmapsTest001, TestSize.Level1)
563 {
564     GPUContext gpuContext;
565     YUVInfo info(100, 100, YUVInfo::PlaneConfig::Y_UV, YUVInfo::SubSampling::K420,
566         YUVInfo::YUVColorSpace::JPEG_FULL_YUVCOLORSPACE);
567     auto image = Image::MakeFromYUVAPixmaps(gpuContext, info, nullptr);
568     EXPECT_TRUE(image == nullptr);
569 }
570 
571 /**
572  * @tc.name: MakeFromYUVAPixmapsTest002
573  * @tc.desc: test for MakeFromYUVAPixmapsTest failed with nullptr memory.
574  * @tc.type: FUNC
575  * @tc.require: I782P9
576  */
577 HWTEST_F(ImageTest, MakeFromYUVAPixmapsTest002, TestSize.Level1)
578 {
579     auto renderContext = std::make_shared<RenderContext>();
580     renderContext->InitializeEglContext();
581     renderContext->SetUpGpuContext();
582     auto gpuContext = renderContext->GetSharedDrGPUContext();
583     ASSERT_NE(gpuContext, nullptr);
584 
585     YUVInfo info(100, 100, YUVInfo::PlaneConfig::Y_UV, YUVInfo::SubSampling::K420,
586         YUVInfo::YUVColorSpace::JPEG_FULL_YUVCOLORSPACE);
587     auto image = Image::MakeFromYUVAPixmaps(*gpuContext, info, nullptr);
588     EXPECT_TRUE(image == nullptr);
589     gpuContext = nullptr;
590 }
591 
592 /**
593  * @tc.name: MakeFromYUVAPixmapsTest003
594  * @tc.desc: test for MakeFromYUVAPixmapsTest success for YUV NV21.
595  * @tc.type: FUNC
596  * @tc.require: I782P9
597  */
598 HWTEST_F(ImageTest, MakeFromYUVAPixmapsTest003, TestSize.Level1)
599 {
600     auto renderContext = std::make_shared<RenderContext>();
601     renderContext->InitializeEglContext();
602     renderContext->SetUpGpuContext();
603     auto gpuContext = renderContext->GetSharedDrGPUContext();
604     ASSERT_NE(gpuContext, nullptr);
605 
606     size_t bufferSize = g_testJpgLength;
607     uint8_t *buffer = g_testJpgBuffer;
608     uint32_t errorCode = 0;
609     Media::SourceOptions opts;
610     opts.formatHint = "image/jpeg";
611     std::unique_ptr<Media::ImageSource> imageSource = Media::ImageSource::CreateImageSource(buffer,
612         bufferSize, opts, errorCode);
613     ASSERT_NE(imageSource.get(), nullptr);
614     Media::DecodeOptions decodeOpts;
615     decodeOpts.desiredPixelFormat = Media::PixelFormat::NV21;
616     std::unique_ptr<Media::PixelMap> pixelMap = imageSource->CreatePixelMap(decodeOpts, errorCode);
617     ASSERT_NE(pixelMap.get(), nullptr);
618 
619     YUVInfo info(300, 300, YUVInfo::PlaneConfig::Y_VU, YUVInfo::SubSampling::K420,
620         YUVInfo::YUVColorSpace::JPEG_FULL_YUVCOLORSPACE);
621     auto image = Image::MakeFromYUVAPixmaps(*gpuContext, info,
622         const_cast<void *>(reinterpret_cast<const void*>(pixelMap->GetPixels())));
623     EXPECT_TRUE(image != nullptr);
624     gpuContext = nullptr;
625 }
626 
627 /**
628  * @tc.name: MakeFromYUVAPixmapsTest004
629  * @tc.desc: test for MakeFromYUVAPixmapsTest success for YUV NV12.
630  * @tc.type: FUNC
631  * @tc.require: I782P9
632  */
633 HWTEST_F(ImageTest, MakeFromYUVAPixmapsTest004, TestSize.Level1)
634 {
635     auto renderContext = std::make_shared<RenderContext>();
636     renderContext->InitializeEglContext();
637     renderContext->SetUpGpuContext();
638     auto gpuContext = renderContext->GetSharedDrGPUContext();
639     ASSERT_NE(gpuContext, nullptr);
640 
641     size_t bufferSize = g_testJpgLength;
642     uint8_t *buffer = g_testJpgBuffer;
643     uint32_t errorCode = 0;
644     Media::SourceOptions opts;
645     opts.formatHint = "image/jpeg";
646     std::unique_ptr<Media::ImageSource> imageSource = Media::ImageSource::CreateImageSource(buffer,
647         bufferSize, opts, errorCode);
648     ASSERT_NE(imageSource.get(), nullptr);
649     Media::DecodeOptions decodeOpts;
650     decodeOpts.desiredPixelFormat = Media::PixelFormat::NV12;
651     std::unique_ptr<Media::PixelMap> pixelMap = imageSource->CreatePixelMap(decodeOpts, errorCode);
652     ASSERT_NE(pixelMap.get(), nullptr);
653 
654     YUVInfo info(300, 300, YUVInfo::PlaneConfig::Y_UV, YUVInfo::SubSampling::K420,
655         YUVInfo::YUVColorSpace::JPEG_FULL_YUVCOLORSPACE);
656     auto image = Image::MakeFromYUVAPixmaps(*gpuContext, info,
657         const_cast<void *>(reinterpret_cast<const void*>(pixelMap->GetPixels())));
658     EXPECT_TRUE(image != nullptr);
659     gpuContext = nullptr;
660 }
661 #endif
662 } // namespace Drawing
663 } // namespace Rosen
664 } // namespace OHOS