• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in comliance with the License.
5  * You may obtian 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, software
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 "../../dtk_constants.h"
17 #include "../../dtk_test_ext.h"
18 #include "../../utils.h"
19 
20 namespace OHOS {
21 namespace Rosen {
22 
23 // Bitmap_Scene_0481
24 // Bitmap构造接口:Bitmap_Build_L1_60
25 // Bitmap操作接口:ReadPixels
26 // cilp:null
27 // transform:null
28 // 抗锯齿:非AA
29 // 透明度:不透明
30 // 视效:CreateLumaColorFilter
31 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 1)
32 {
33     /*
34      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
35      */
36     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
37     using namespace Drawing;
38     Drawing::Brush brush;
39     brush.SetAntiAlias(false); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
40 
41     // 2.创建Bitmap, Bitmap_Build_L1_60
42     Drawing::Bitmap bitmap;
43     auto colorspace = Drawing::ColorSpace::CreateSRGBLinear();
44     auto imageInfo = ImageInfo(511, 844, COLORTYPE_RGBA_F16, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
45     bitmap.Build(imageInfo);
46     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
47 
48     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
49     Drawing::Bitmap bitmap1;
50     // 4.Bitmap操作接口:ReadPixels
51     auto imageInfo1 = Drawing::ImageInfo(500, 500, // 500 width & Height
52         Drawing::COLORTYPE_UNKNOWN, Drawing::ALPHATYPE_UNKNOWN);
53     bitmap1.ReadPixels(imageInfo1, bitmap.GetPixels(), bitmap.GetRowBytes(), 50, 50); // (50, 50) is position
54     bitmap1.ClearWithColor(0xFF4567FA);                                               // 不透明效果,粉蓝色
55 
56     // 5.视效:CreateLumaColorFilter
57     brush.SetColor(0xFF0000FF); // 蓝色
58     auto filter = Drawing::Filter();
59     filter.SetColorFilter(Drawing::ColorFilter::CreateLumaColorFilter());
60     brush.SetFilter(filter);
61 
62     // 6.绘制结果
63     playbackCanvas_->AttachBrush(brush);
64     playbackCanvas_->DrawBitmap(bitmap, 100, 100); // 100,100 is bitmap position
65     playbackCanvas_->DrawBitmap(bitmap1, 110, 120);
66     playbackCanvas_->DetachBrush();
67 }
68 
69 // Bitmap_Scene_0482
70 // Bitmap构造接口:Bitmap_Build_L1_60
71 // Bitmap操作接口:CopyPixels
72 // cilp:ClipPath
73 // transform:ConcatMatrix
74 // 抗锯齿:AA
75 // 透明度:透明
76 // 视效:CreateBlendImageFilter
77 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 2)
78 {
79     /*
80      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
81      */
82     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
83     using namespace Drawing;
84     Drawing::Brush brush;
85     brush.SetAntiAlias(true); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
86 
87     // 2.创建Bitmap Bitmap_Build_L1_60
88     Drawing::Bitmap bitmap;
89     auto colorspace = Drawing::ColorSpace::CreateSRGBLinear();
90     auto imageInfo = ImageInfo(511, 844, COLORTYPE_RGBA_F16, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
91     bitmap.Build(imageInfo);
92     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
93 
94     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
95     Drawing::Bitmap bitmap1;
96     // Bitmap操作接口:CopyPixels
97     bitmap1.CopyPixels(bitmap, 50, 50); // 50 width & Height
98     bitmap1.ClearWithColor(0x004567FA); // 透明效果,粉蓝色
99 
100     // 4.transform:ConcatMatrix
101     Drawing::Matrix matrix;
102     matrix.Rotate(18, 10, 10);
103     playbackCanvas_->ConcatMatrix(matrix);
104 
105     // 5.视效:CreateBlendImageFilter
106     brush.SetColor(0x4CB21933);
107 
108     for (auto blendMode : blendModes) {
109         auto background = Drawing::ImageFilter::CreateBlurImageFilter(
110             1.0f, 1.0f, Drawing::TileMode::REPEAT, nullptr, Drawing::ImageBlurType::GAUSS);
111         auto foreground = Drawing::ImageFilter::CreateBlurImageFilter(
112             1.0f, 1.0f, Drawing::TileMode::REPEAT, nullptr, Drawing::ImageBlurType::GAUSS);
113         auto filter = Drawing::Filter();
114         filter.SetImageFilter(Drawing::ImageFilter::CreateBlendImageFilter(blendMode, background, foreground));
115         brush.SetFilter(filter);
116         // 绘制结果
117         playbackCanvas_->AttachBrush(brush);
118         playbackCanvas_->DrawBitmap(bitmap, 200, 200); // 200,200 is bitmap position
119         playbackCanvas_->DrawBitmap(bitmap1, 250, 300);
120     }
121     playbackCanvas_->DetachBrush();
122 
123     // 6.cilp:ClipPath
124     Drawing::Path path;
125     path.AddRect({ 200, 300, 700, 800 }); // rect region (200, 300, 700, 800)
126     path.SetFillStyle(Drawing::PathFillType::INVERSE_WINDING);
127     playbackCanvas_->Save();
128     playbackCanvas_->ClipPath(path, Drawing::ClipOp::DIFFERENCE, true);
129     playbackCanvas_->Clear(Drawing::Color::COLOR_GREEN);
130     playbackCanvas_->Restore();
131 }
132 
133 // Bitmap_Scene_0483
134 // Bitmap构造接口:Bitmap_Build_L1_60
135 // Bitmap操作接口:InstallPixels
136 // cilp:ClipRect
137 // transform:Rotate
138 // 抗锯齿:非AA
139 // 透明度:半透明
140 // 视效:CreateBlendShader
141 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 3)
142 {
143     /*
144      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
145      */
146     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
147     using namespace Drawing;
148     Drawing::Brush brush;
149     brush.SetAntiAlias(false); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
150 
151     // 2.创建Bitmap Bitmap_Build_L1_60
152     Drawing::Bitmap bitmap;
153     auto colorspace = Drawing::ColorSpace::CreateSRGBLinear();
154     auto imageInfo = ImageInfo(511, 844, COLORTYPE_RGBA_F16, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
155     bitmap.Build(imageInfo);
156     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
157 
158     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
159     // Bitmap操作接口:InstallPixels
160     Drawing::Bitmap bitmap1;
161     uint32_t pixels[][5] = { { 0xBFA12345, 0xCB9745D2, 0xD0ACB2F4, 0xD34A1234, 0xCDE7AB9F },
162         { 0xD98289C1, 0xC56A2F1A, 0xF3A807CC, 0xBD31C9A2, 0xF05A5378 },
163         { 0xCF19A7E4, 0xF29074BD, 0xC0C35F1A, 0xE73812A7, 0xD98E2B43 },
164         { 0xB6F10D34, 0xD98289C1, 0xC9A4527A, 0xC03D15A2, 0xF4B2C380 },
165         { 0xBF1D68A3, 0xE5A3D1C4, 0xCBF722ED, 0xD7A9BC64, 0xB4C5F219 } };
166     if (bitmap1.InstallPixels(imageInfo, pixels, bitmap.GetRowBytes())) {
167         Drawing::Image image;
168         image.BuildFromBitmap(bitmap1);
169 
170         // 4.transform:Rotate
171         playbackCanvas_->Rotate(30, 10, 10); // 30 angle 10 position
172 
173         // 5.视效:CreateBlendShader
174         Drawing::Brush brush;
175         brush.SetColor(0xFFFF0000);
176 
177         auto dst = Drawing::ShaderEffect::CreateColorShader(Drawing::Color::COLOR_RED);
178         auto src = Drawing::ShaderEffect::CreateColorShader(Drawing::Color::COLOR_GREEN);
179         for (auto blendMode : blendModes) {
180             auto blendShader = Drawing::ShaderEffect::CreateBlendShader(*dst, *src, blendMode);
181             brush.SetShaderEffect(blendShader);
182 
183             // 绘制效果
184             playbackCanvas_->AttachBrush(brush);
185             playbackCanvas_->DrawBitmap(bitmap, 200, 200); // 200,200 is bitmap position
186             playbackCanvas_->DrawImage(image, 250, 300, SamplingOptions());
187             playbackCanvas_->DrawBitmap(bitmap1, 250, 300);
188         }
189         playbackCanvas_->DetachBrush();
190 
191         // 6.cilp:ClipRect // 抗锯齿与笔刷保持一致
192         auto rect = Drawing::Rect(250, 300, 500, 500); // rect region (250, 300, 500, 500)
193         playbackCanvas_->Save();
194         playbackCanvas_->ClipRect(rect, Drawing::ClipOp::DIFFERENCE, false);
195         playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
196         playbackCanvas_->Restore();
197     }
198 }
199 
200 // Bitmap_Scene_0484
201 // Bitmap构造接口:Bitmap_Build_L1_60
202 // Bitmap操作接口:Serialize/Deserialize
203 // cilp:ClipRoundRect(G2)
204 // transform:Scale(正常值)
205 // 抗锯齿:AA
206 // 透明度:不透明
207 // 视效:CreateBlurMaskFilter
208 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 4)
209 {
210     /*
211      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
212      */
213     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
214     using namespace Drawing;
215     Drawing::Brush brush;
216     brush.SetAntiAlias(true); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
217 
218     // 2.创建Bitmap, Bitmap_Build_L1_60
219     Drawing::Bitmap bitmap;
220     auto colorspace = Drawing::ColorSpace::CreateSRGBLinear();
221     auto imageInfo = ImageInfo(511, 844, COLORTYPE_RGBA_F16, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
222     bitmap.Build(imageInfo);
223     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
224 
225     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
226     Drawing::Bitmap bitmap1;
227     bitmap.Build(imageInfo);
228     bitmap1.ClearWithColor(0xFF4567FA); // 不透明效果,粉蓝色
229     auto data = bitmap1.Serialize();
230     if (bitmap1.Deserialize(data)) {
231         playbackCanvas_->DrawBackground(0xFF675800);
232     }
233 
234     // 4.transform:Scale(正常值)
235     playbackCanvas_->Scale(2.0f, 2.0f); // ratio
236 
237     // 5.视效:CreateBlurMaskFilter
238     brush.SetColor(0xFFFF0000);
239     std::vector<Drawing::BlurType> blurTypes = { Drawing::BlurType::NORMAL, Drawing::BlurType::SOLID,
240         Drawing::BlurType::OUTER, Drawing::BlurType::INNER };
241 
242     for (auto& blurType : blurTypes) {
243         auto filter = Drawing::Filter();
244         filter.SetMaskFilter(Drawing::MaskFilter::CreateBlurMaskFilter(blurType, 10.0f, true));
245         brush.SetFilter(filter);
246 
247         // 绘制结果
248         playbackCanvas_->AttachBrush(brush);
249         playbackCanvas_->DrawBitmap(bitmap, 200, 200); // 200,200 is bitmap position
250         playbackCanvas_->DrawBitmap(bitmap1, 250, 300);
251     }
252     playbackCanvas_->DetachBrush();
253 
254     // 6.cilp:ClipRoundRect(G2)
255     auto rect = Drawing::Rect(250, 300, 500, 500);       // rect region (250, 300, 500, 500)
256     auto rrect = Drawing::RoundRect(rect, 30.0f, 30.0f); // 30.0f is angle
257     playbackCanvas_->Save();
258     playbackCanvas_->ClipRoundRect(rrect, Drawing::ClipOp::DIFFERENCE, true);
259     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
260     playbackCanvas_->Restore();
261 }
262 
263 // Bitmap_Scene_0485
264 // Bitmap构造接口:Bitmap_Build_L1_70
265 // Bitmap操作接口:GetWidth
266 // cilp:null
267 // transform:Translate
268 // 抗锯齿:非AA
269 // 透明度:不透明
270 // 视效:CreateComposeColorFilter
271 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 5)
272 {
273     /*
274      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
275      */
276     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
277     using namespace Drawing;
278     Drawing::Brush brush;
279     brush.SetAntiAlias(false); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
280 
281     // 2.创建Bitmap Bitmap_Build_L1_70
282     auto colorspace = Drawing::ColorSpace::CreateSRGB();
283     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
284     Drawing::Bitmap bitmap;
285     bitmap.Build(imageInfo);
286     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
287 
288     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
289     Drawing::Bitmap bitmap1;
290     Drawing::BitmapFormat format { COLORTYPE_N32, ALPHATYPE_UNKNOWN };
291     bitmap1.Build(bitmap.GetWidth(), 500, format); // 500 is height
292     bitmap1.ClearWithColor(0xFF4567FA);            // 不透明 粉蓝色
293 
294     // 4.transform:Translate
295     playbackCanvas_->Translate(200, 200); // 200 distance
296 
297     // 5.视效:CreateComposeColorFilter
298     brush.SetColor(0xFFFF0000); // 红色
299 
300     for (auto blendMode1 : blendModes) {
301         std::shared_ptr<Drawing::ColorFilter> colorFilter1 =
302             Drawing::ColorFilter::CreateBlendModeColorFilter(0xFFFF0000, blendMode1);
303         for (auto blendMode2 : blendModes) {
304             std::shared_ptr<Drawing::ColorFilter> colorFilter2 =
305                 Drawing::ColorFilter::CreateBlendModeColorFilter(0xFFFF00FF, blendMode2);
306             std::shared_ptr<Drawing::ColorFilter> colorFilter3 =
307                 Drawing::ColorFilter::CreateComposeColorFilter(*colorFilter1, *colorFilter2);
308             auto filter = Drawing::Filter();
309             filter.SetColorFilter(colorFilter3);
310             brush.SetFilter(filter);
311 
312             // 绘制结果
313             playbackCanvas_->AttachBrush(brush);
314             playbackCanvas_->DrawBitmap(bitmap, 200, 200); // 200,200 is bitmap position
315             playbackCanvas_->DrawBitmap(bitmap1, 250, 300);
316             playbackCanvas_->DetachBrush();
317         }
318     }
319 }
320 
321 // Bitmap_Scene_0486
322 // Bitmap构造接口:Bitmap_Build_L1_70
323 // Bitmap操作接口:GetHeight
324 // cilp:ClipPath
325 // transform:Shear
326 // 抗锯齿:AA
327 // 透明度:透明
328 // 视效:CreateMatrixColorFilter
329 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 6)
330 {
331     /*
332      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
333      */
334     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
335     using namespace Drawing;
336     Drawing::Brush brush;
337     brush.SetAntiAlias(true); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
338 
339     // 2.创建Bitmap Bitmap_Build_L1_70
340     auto colorspace = Drawing::ColorSpace::CreateSRGB();
341     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
342     Drawing::Bitmap bitmap;
343     bitmap.Build(imageInfo);
344     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
345 
346     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
347     // GetHeight
348     Drawing::Bitmap bitmap1;
349     Drawing::BitmapFormat format { COLORTYPE_N32, ALPHATYPE_UNKNOWN };
350     bitmap1.Build(500, bitmap.GetHeight(), format); // 500 is width
351     bitmap1.ClearWithColor(0x004567FA);             // 透明 粉蓝色
352 
353     // 4.transform:Shear
354     playbackCanvas_->Shear(10.0f, 10.0f); // slope
355 
356     // 5.视效:CreateMatrixColorFilter
357     Drawing::ColorMatrix matrix;
358     matrix.SetArray(ARR);
359     auto cf = Drawing::ColorFilter::CreateMatrixColorFilter(matrix);
360     auto filter = Drawing::Filter();
361     filter.SetImageFilter(Drawing::ImageFilter::CreateColorFilterImageFilter(*cf, nullptr));
362     brush.SetFilter(filter);
363 
364     // 6.绘制结果
365     playbackCanvas_->AttachBrush(brush);
366     playbackCanvas_->DrawBitmap(bitmap, 100, 100); // 100,100 is bitmap position
367     playbackCanvas_->DrawBitmap(bitmap1, 110, 120);
368     playbackCanvas_->DetachBrush();
369 
370     // 7.cilp:ClipPath
371     Drawing::Path path;
372     path.AddRect({ 200, 300, 700, 800 }); // rect region (200, 300, 700, 800)
373     path.SetFillStyle(Drawing::PathFillType::INVERSE_WINDING);
374     playbackCanvas_->Save();
375     playbackCanvas_->ClipPath(path, Drawing::ClipOp::DIFFERENCE, false);
376     playbackCanvas_->Clear(Drawing::Color::COLOR_GREEN);
377     playbackCanvas_->Restore();
378 }
379 
380 // Bitmap_Scene_0487
381 // Bitmap构造接口:Bitmap_Build_L1_70
382 // Bitmap操作接口:GetColorType
383 // cilp:ClipRect
384 // transform:null
385 // 抗锯齿:非AA
386 // 透明度:半透明
387 // 视效:CreateLinearToSrgbGamma
388 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 7)
389 {
390     /*
391      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
392      */
393     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
394     using namespace Drawing;
395     Drawing::Brush brush;
396     brush.SetAntiAlias(false); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
397 
398     // 2.创建Bitmap Bitmap_Build_L1_70
399     auto colorspace = Drawing::ColorSpace::CreateSRGB();
400     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
401     Drawing::Bitmap bitmap;
402     bitmap.Build(imageInfo);
403     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
404 
405     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
406     Drawing::Bitmap bitmap1;
407     // Bitmap操作接口:GetColorType
408     Drawing::BitmapFormat format1 { bitmap.GetColorType(), Drawing::AlphaType::ALPHATYPE_UNKNOWN };
409     bitmap1.Build(500, 500, format1);   // 500 width & Height
410     bitmap1.ClearWithColor(0x894567FA); // 半透明 粉蓝色
411 
412     // 4.视效:CreateLinearToSrgbGamma
413     brush.SetColor(0xFF4F7091);
414     auto filter = Drawing::Filter();
415     filter.SetColorFilter(Drawing::ColorFilter::CreateLinearToSrgbGamma());
416     brush.SetFilter(filter);
417 
418     // 5.绘制结果
419     playbackCanvas_->AttachBrush(brush);
420     playbackCanvas_->DrawBitmap(bitmap, 100, 100); // 100,100 is bitmap position
421     playbackCanvas_->DrawBitmap(bitmap1, 110, 120);
422     playbackCanvas_->DetachBrush();
423 
424     // 6.cilp:ClipRect
425     auto rect = Drawing::Rect(250, 300, 500, 500); // rect region (250, 300, 500, 500)
426     playbackCanvas_->Save();
427     playbackCanvas_->ClipRect(rect, Drawing::ClipOp::DIFFERENCE, false);
428     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
429     playbackCanvas_->Restore();
430 }
431 
432 // Bitmap_Scene_0488
433 // Bitmap构造接口:Bitmap_Build_L1_70
434 // Bitmap操作接口:GetAlphaType
435 // cilp:ClipRoundRect(G2)
436 // transform:ConcatMatrix
437 // 抗锯齿:AA
438 // 透明度:透明
439 // 视效:CreateSrgbGammaToLinear
440 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 8)
441 {
442     /*
443      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
444      */
445     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
446     using namespace Drawing;
447     Drawing::Brush brush;
448     brush.SetAntiAlias(true); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
449 
450     // 2.创建Bitmap Bitmap_Build_L1_70
451     auto colorspace = Drawing::ColorSpace::CreateSRGB();
452     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
453     Drawing::Bitmap bitmap;
454     bitmap.Build(imageInfo);
455     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
456 
457     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
458     // GetAlphaType
459     Drawing::Bitmap bitmap1;
460     Drawing::BitmapFormat format1 { Drawing::ColorType::COLORTYPE_N32, bitmap.GetAlphaType() };
461     bitmap1.Build(500, 500, format1);   // 500 width & Height
462     bitmap1.ClearWithColor(0x004567FA); // 透明 粉蓝色
463 
464     // 4.transform:ConcatMatrix
465     Drawing::Matrix matrix;
466     matrix.Rotate(15, 10, 10); // 15 angle 10 position
467     playbackCanvas_->ConcatMatrix(matrix);
468 
469     // 5.视效:CreateSrgbGammaToLinear
470     brush.SetColor(0xFF4F7091);
471     auto filter = Drawing::Filter();
472     filter.SetColorFilter(Drawing::ColorFilter::CreateSrgbGammaToLinear());
473     brush.SetFilter(filter);
474 
475     // 6.绘制结果
476     playbackCanvas_->AttachBrush(brush);
477     playbackCanvas_->DrawBitmap(bitmap, 200, 200); // 200,200 is bitmap position
478     playbackCanvas_->DrawBitmap(bitmap1, 250, 300);
479     playbackCanvas_->DetachBrush();
480 
481     // 7.cilp:ClipRoundRect(G2)
482     auto rect = Drawing::Rect(250, 300, 500, 500);       // rect region (250, 300, 500, 500)
483     auto rrect = Drawing::RoundRect(rect, 30.0f, 30.0f); // 30.0f is angle
484     playbackCanvas_->Save();
485     playbackCanvas_->ClipRoundRect(rrect, Drawing::ClipOp::DIFFERENCE, true);
486     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
487     playbackCanvas_->Restore();
488 }
489 
490 // Bitmap_Scene_0489
491 // Bitmap构造接口:Bitmap_Build_L1_70
492 // Bitmap操作接口:GetRowBytes
493 // cilp:ClipRoundRect(G2_capsule)
494 // transform:Rotate
495 // 抗锯齿:非AA
496 // 透明度:半透明
497 // 视效:CreateLumaColorFilter
498 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 9)
499 {
500     /*
501      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
502      */
503     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
504     using namespace Drawing;
505     Drawing::Brush brush;
506     brush.SetAntiAlias(false); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
507 
508     // 2.创建Bitmap Bitmap_Build_L1_70
509     auto colorspace = Drawing::ColorSpace::CreateSRGB();
510     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
511     Drawing::Bitmap bitmap;
512     bitmap.Build(imageInfo);
513     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
514 
515     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
516     // GetRowBytes
517     Drawing::Bitmap bitmap1;
518     bitmap.Build(imageInfo);
519     if (bitmap1.GetRowBytes() == sizeof(uint32_t) * bitmap1.GetWidth()) {
520         playbackCanvas_->DrawBackground(0x89675800); // 半透明 深棕榈
521     }
522 
523     // 4.transform:Rotate
524     playbackCanvas_->Rotate(30, 10, 10); // 30 angle 10 position
525 
526     // 5.视效:CreateLumaColorFilter
527     brush.SetColor(0xFF0000FF); // 蓝色
528     auto filter = Drawing::Filter();
529     filter.SetColorFilter(Drawing::ColorFilter::CreateLumaColorFilter());
530     brush.SetFilter(filter);
531 
532     // 6.绘制结果
533     playbackCanvas_->AttachBrush(brush);
534     playbackCanvas_->DrawBitmap(bitmap, 200, 200); // 200,200 is bitmap position
535     playbackCanvas_->DrawBitmap(bitmap1, 250, 300);
536     playbackCanvas_->DetachBrush();
537 
538     // 7.cilp:ClipRoundRect(G2_capsule)
539     auto rect = Drawing::Rect(250, 300, 500, 500);       // rect region (250, 300, 500, 500)
540     auto rrect = Drawing::RoundRect(rect, 50.0f, 50.0f); // 50.0f is angle
541     playbackCanvas_->Save();
542     playbackCanvas_->ClipRoundRect(rrect, Drawing::ClipOp::DIFFERENCE, true);
543     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
544     playbackCanvas_->Restore();
545 }
546 
547 // Bitmap_Scene_0450
548 // Bitmap构造接口:Bitmap_Build_L1_70
549 // Bitmap操作接口:GetImageInfo
550 // cilp:ClipRoundRect(非G2)
551 // transform:Scale(正常值)
552 // 抗锯齿:AA
553 // 透明度:不透明
554 // 视效:CreateBlendImageFilter
555 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 10)
556 {
557     /*
558      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
559      */
560     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
561     using namespace Drawing;
562     Drawing::Brush brush;
563     brush.SetAntiAlias(true); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
564 
565     // 2.创建Bitmap Bitmap_Build_L1_70
566     auto colorspace = Drawing::ColorSpace::CreateSRGB();
567     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
568     Drawing::Bitmap bitmap;
569     bitmap.Build(imageInfo);
570     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
571 
572     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
573     Drawing::Bitmap bitmap1;
574     bitmap1.Build(imageInfo);
575     // Bitmap操作接口:GetImageInfo
576     bitmap1.TryAllocPixels(bitmap.GetImageInfo());
577     bitmap1.ClearWithColor(0xFF4567FA); // 不透明效果,粉蓝色
578 
579     // 4.transform:Scale(正常值)
580     playbackCanvas_->Scale(2.0f, 2.0f); // ratio
581 
582     // 5.视效:CreateBlendImageFilter
583     brush.SetColor(0x4CB21933);
584 
585     for (auto blendMode : blendModes) {
586         auto background = Drawing::ImageFilter::CreateBlurImageFilter(
587             1.0f, 1.0f, Drawing::TileMode::REPEAT, nullptr, Drawing::ImageBlurType::GAUSS);
588         auto foreground = Drawing::ImageFilter::CreateBlurImageFilter(
589             1.0f, 1.0f, Drawing::TileMode::REPEAT, nullptr, Drawing::ImageBlurType::GAUSS);
590         auto filter = Drawing::Filter();
591         filter.SetImageFilter(Drawing::ImageFilter::CreateBlendImageFilter(blendMode, background, foreground));
592         brush.SetFilter(filter);
593         // 6.绘制结果
594         playbackCanvas_->AttachBrush(brush);
595         playbackCanvas_->DrawBitmap(bitmap, 200, 200); // 200,200 is bitmap position
596         playbackCanvas_->DrawBitmap(bitmap1, 250, 300);
597     }
598     playbackCanvas_->DetachBrush();
599 
600     // 7.cilp:ClipRoundRect(非G2)
601     auto rect = Drawing::Rect(250, 300, 500, 500);       // rect region (250, 300, 500, 500)
602     auto rrect = Drawing::RoundRect(rect, 30.0f, 30.0f); // 30.0f is angle
603     playbackCanvas_->Save();
604     playbackCanvas_->ClipRoundRect(rrect, Drawing::ClipOp::DIFFERENCE, true);
605     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
606     playbackCanvas_->Restore();
607 }
608 
609 // Bitmap构造接口:Bitmap_Build_L1_70
610 // Bitmap操作接口:SetInfo
611 // cilp:ClipRoundRect(G2_capsule)
612 // transform:Scale(极大值)
613 // 抗锯齿:非AA
614 // 透明度:透明
615 // 视效:CreateBlendShader
616 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 11)
617 {
618     /*
619      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
620      */
621     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
622     using namespace Drawing;
623     Drawing::Brush brush;
624     brush.SetAntiAlias(false); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
625 
626     // 2.创建Bitmap, Bitmap_Build_L1_70
627     auto colorspace = Drawing::ColorSpace::CreateSRGB();
628     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
629     Drawing::Bitmap bitmap;
630     bitmap.Build(imageInfo);
631     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
632 
633     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
634     Drawing::Bitmap bitmap1;
635     // 4.Bitmap操作接口:SetInfo
636     bitmap1.SetInfo(bitmap.GetImageInfo());
637     bitmap1.ClearWithColor(0x004567FA); // 透明效果,粉蓝色
638 
639     // 5.transform:Scale(极大值)
640     playbackCanvas_->Scale(1.0f, 10100.0f); // ratio
641 
642     // 5.视效:CreateBlendShader
643     brush.SetColor(0xFFFF0000);
644 
645     auto dst = Drawing::ShaderEffect::CreateColorShader(Drawing::Color::COLOR_RED);
646     auto src = Drawing::ShaderEffect::CreateColorShader(Drawing::Color::COLOR_GREEN);
647     for (auto blendMode : blendModes) {
648         auto blendShader = Drawing::ShaderEffect::CreateBlendShader(*dst, *src, blendMode);
649         brush.SetShaderEffect(blendShader);
650 
651         // 6.绘制结果
652         playbackCanvas_->AttachBrush(brush);
653         playbackCanvas_->DrawBitmap(bitmap, 200, 200); // 200,200 is bitmap position
654         playbackCanvas_->DrawBitmap(bitmap1, 250, 300);
655     }
656     playbackCanvas_->DetachBrush();
657 
658     // 7. cilp:ClipRoundRect(G2_capsule)
659     auto rect = Drawing::Rect(250, 300, 400, 500);       // rect region (250, 300, 400, 500)
660     auto rrect = Drawing::RoundRect(rect, 50.0f, 50.0f); // 50.0f is angle
661     playbackCanvas_->Save();
662     playbackCanvas_->ClipRoundRect(rrect, Drawing::ClipOp::DIFFERENCE, false);
663     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
664     playbackCanvas_->Restore();
665 }
666 
667 // Bitmap构造接口:Bitmap_Build_L1_70
668 // Bitmap操作接口:ComputeByteSize
669 // cilp:ClipRoundRect(非G2)
670 // transform:Scale(极小值)
671 // 抗锯齿:AA
672 // 透明度:半透明
673 // 视效:CreateBlurMaskFilter
674 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 12)
675 {
676     /*
677      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
678      */
679     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
680     using namespace Drawing;
681     Drawing::Brush brush;
682     brush.SetAntiAlias(true); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
683 
684     // 2.创建Bitmap, Bitmap_Build_L1_70
685     auto colorspace = Drawing::ColorSpace::CreateSRGB();
686     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
687     Drawing::Bitmap bitmap;
688     bitmap.Build(imageInfo);
689     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
690 
691     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
692     Drawing::Bitmap bitmap1;
693     // Bitmap操作接口:ComputeByteSize
694     bitmap1.ClearWithColor(0x894567FA); // 半透明效果,粉蓝色
695     bitmap1.Build(imageInfo);
696     size_t size = bitmap.GetRowBytes() * bitmap.GetHeight();
697     if (bitmap1.ComputeByteSize() == size) {
698         playbackCanvas_->DrawBackground(0xFF675800); // 深棕榈
699     }
700 
701     // 4.transform:Scale(极小值)
702     playbackCanvas_->Scale(10100.0f, 1.0f); // ratio
703 
704     // 5.视效:CreateBlurMaskFilter
705     brush.SetColor(0xFFFF0000);
706     std::vector<Drawing::BlurType> blurTypes = { Drawing::BlurType::NORMAL, Drawing::BlurType::SOLID,
707         Drawing::BlurType::OUTER, Drawing::BlurType::INNER };
708 
709     for (auto& blurType : blurTypes) {
710         auto filter = Drawing::Filter();
711         filter.SetMaskFilter(Drawing::MaskFilter::CreateBlurMaskFilter(blurType, 10.0f, true));
712         brush.SetFilter(filter);
713 
714         // 绘制结果
715         playbackCanvas_->AttachBrush(brush);
716         playbackCanvas_->DrawBitmap(bitmap, 200, 200); // 200,200 is bitmap position
717         playbackCanvas_->DrawBitmap(bitmap1, 250, 300);
718     }
719     playbackCanvas_->DetachBrush();
720 
721     // 6.cilp:ClipRoundRect(非G2)
722     auto rect = Drawing::Rect(300, 300, 400, 400);       // rect region (300, 300, 400, 400)
723     auto rrect = Drawing::RoundRect(rect, 30.0f, 30.0f); // 30.0f is angle
724     playbackCanvas_->Save();
725     playbackCanvas_->ClipRoundRect(rrect, Drawing::ClipOp::DIFFERENCE, true);
726     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
727     playbackCanvas_->Restore();
728 }
729 
730 // Bitmap构造接口:Bitmap_Build_L1_70
731 // Bitmap操作接口:SetPixel/GetPixel
732 // cilp:null
733 // transform:Scale(极大值)
734 // 抗锯齿:非AA
735 // 透明度:不透明
736 // 视效:null
737 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 13)
738 {
739     /*
740      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
741      */
742     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
743     using namespace Drawing;
744     Drawing::Brush brush;
745     brush.SetAntiAlias(false); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
746 
747     // 2.创建Bitmap, Bitmap_Build_L1_70
748     auto colorspace = Drawing::ColorSpace::CreateSRGB();
749     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
750     Drawing::Bitmap bitmap;
751     bitmap.Build(imageInfo);
752     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
753 
754     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
755     // Bitmap操作接口:SetPixel/GetPixel
756     Drawing::Bitmap bitmap1;
757     bitmap1.ClearWithColor(0xFF4567FA); // 不透明效果,粉蓝色
758     bitmap1.Build(imageInfo);
759     bitmap1.SetPixels(bitmap.GetPixels());
760 
761     // 4.transform:Scale(极大值)
762     playbackCanvas_->Scale(1.0f, 10100.0f); // ratio
763 
764     // 5.绘制结果
765     playbackCanvas_->AttachBrush(brush);
766     playbackCanvas_->DrawBitmap(bitmap, 100, 100); // 100,100 is bitmap position
767     playbackCanvas_->DrawBitmap(bitmap1, 110, 120);
768     playbackCanvas_->DetachBrush();
769 }
770 
771 // Bitmap构造接口:Bitmap_Build_L1_70
772 // Bitmap操作接口:IsEmpty
773 // cilp:ClipPath
774 // transform:Scale(极小值)
775 // 抗锯齿:AA
776 // 透明度:透明
777 // 视效:CreateLinearGradient
778 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 14)
779 {
780     /*
781      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
782      */
783     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
784     using namespace Drawing;
785     Drawing::Brush brush;
786     brush.SetAntiAlias(true); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
787 
788     // 2.创建Bitmap, Bitmap_Build_L1_70
789     auto colorspace = Drawing::ColorSpace::CreateSRGB();
790     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
791     Drawing::Bitmap bitmap;
792     bitmap.Build(imageInfo);
793     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
794 
795     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
796     Drawing::Bitmap bitmap1;
797     bitmap.Build(imageInfo);
798     bitmap1.ClearWithColor(0x004567FA); // 透明效果,粉蓝色
799     // Bitmap操作接口:IsEmpty
800     if (bitmap1.IsEmpty()) {
801         playbackCanvas_->DrawBackground(0xFF675800); // 深棕榈
802     }
803 
804     // 4.transform:Scale(极小值)
805     playbackCanvas_->Scale(10100.0f, 1.0f); // ratio
806 
807     // 5.视效:CreateLinearGradient
808     std::vector<Drawing::ColorQuad> colors = { Drawing::Color::COLOR_RED, Drawing::Color::COLOR_GREEN,
809         Drawing::Color::COLOR_BLUE };
810     std::vector<Drawing::scalar> pos = { 0.00f, 0.50f, 1.00f };
811     auto linearGradient = Drawing::ShaderEffect::CreateLinearGradient(
812         { 0, 0 }, { 1000, 1000 }, colors, pos, Drawing::TileMode::CLAMP); // 0 start pos & 1000 end pos
813     brush.SetShaderEffect(linearGradient);
814 
815     // 绘制结果
816     playbackCanvas_->AttachBrush(brush);
817     playbackCanvas_->DrawBitmap(bitmap, 100, 100); // 100,100 is bitmap position
818     playbackCanvas_->DrawBitmap(bitmap1, 110, 120);
819     playbackCanvas_->DetachBrush();
820 
821     // 6.cilp:ClipPath
822     Drawing::Path path;
823     path.AddRect({ 200, 300, 700, 800 }); // rect region (200, 300, 700, 800)
824     path.SetFillStyle(Drawing::PathFillType::INVERSE_WINDING);
825     playbackCanvas_->Save();
826     playbackCanvas_->ClipPath(path, Drawing::ClipOp::DIFFERENCE, true);
827     playbackCanvas_->Clear(Drawing::Color::COLOR_GREEN);
828     playbackCanvas_->Restore();
829 }
830 
831 // Bitmap构造接口:Bitmap_Build_L1_70
832 // Bitmap操作接口:IsValid
833 // cilp:ClipRect
834 // transform:Translate
835 // 抗锯齿:非AA
836 // 透明度:半透明
837 // 视效:CreateColorShader
838 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 15)
839 {
840     /*
841      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
842      */
843     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
844     using namespace Drawing;
845     Drawing::Brush brush;
846     brush.SetAntiAlias(false); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
847 
848     // 2.创建Bitmap, Bitmap_Build_L1_70
849     auto colorspace = Drawing::ColorSpace::CreateSRGB();
850     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
851     Drawing::Bitmap bitmap;
852     bitmap.Build(imageInfo);
853     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
854 
855     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
856     Drawing::Bitmap bitmap1;
857     bitmap.Build(imageInfo);
858     bitmap1.ClearWithColor(0x894567FA); // 半透明效果,粉蓝色
859     // Bitmap操作接口:IsValid
860     if (bitmap1.IsValid()) {
861         playbackCanvas_->DrawBackground(0xFF675800); // 深棕榈
862     }
863 
864     // 4.transform:Translate
865     playbackCanvas_->Translate(200, 200); // 200 distance
866 
867     // 5.视效:CreateColorShader
868     brush.SetColor(0xFFFF0000); // 红色
869     auto colorShader = Drawing::ShaderEffect::CreateColorShader(Drawing::Color::COLOR_RED);
870     brush.SetShaderEffect(colorShader);
871     // 绘制结果
872     playbackCanvas_->AttachBrush(brush);
873     playbackCanvas_->DrawBitmap(bitmap, 100, 100); // 100,100 is bitmap position
874     playbackCanvas_->DrawBitmap(bitmap1, 110, 120);
875     playbackCanvas_->DetachBrush();
876 
877     // 6.cilp:ClipRect
878     auto rect = Drawing::Rect(250, 300, 500, 500); // rect region (250, 300, 500, 500)
879     playbackCanvas_->Save();
880     playbackCanvas_->ClipRect(rect, Drawing::ClipOp::DIFFERENCE, false);
881     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
882     playbackCanvas_->Restore();
883 }
884 
885 // Bitmap构造接口:Bitmap_Build_L1_70
886 // Bitmap操作接口:GetColor
887 // cilp:ClipRoundRect(G2)
888 // transform:Shear
889 // 抗锯齿:AA
890 // 透明度:不透明
891 // 视效:CreateBlurImageFilter
892 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 16)
893 {
894     /*
895      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
896      */
897     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
898     using namespace Drawing;
899     Drawing::Brush brush;
900     brush.SetAntiAlias(true); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
901 
902     // 2.创建Bitmap Bitmap_Build_L1_70
903     auto colorspace = Drawing::ColorSpace::CreateSRGB();
904     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
905     Drawing::Bitmap bitmap;
906     bitmap.Build(imageInfo);
907     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
908 
909     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
910     // GetColor
911     Drawing::Bitmap bitmap1;
912     bitmap1.Build(imageInfo);
913     bitmap1.ClearWithColor(bitmap.GetColor(1, 1)); // 1 is color position
914 
915     // 4.transform:Shear
916     playbackCanvas_->Shear(10.0f, 10.0f); // slope
917 
918     // 5.视效:CreateBlurImageFilter
919     brush.SetColor(0xFFFF0000); // 红色
920     auto filter = Drawing::Filter();
921     filter.SetImageFilter(Drawing::ImageFilter::CreateBlurImageFilter(
922         10.0f, 10.0f, Drawing::TileMode::CLAMP, nullptr, Drawing::ImageBlurType::GAUSS));
923     brush.SetFilter(filter);
924 
925     // 6.绘制结果
926     playbackCanvas_->AttachBrush(brush);
927     playbackCanvas_->DrawBitmap(bitmap, 100, 100); // 100,100 is bitmap position
928     playbackCanvas_->DrawBitmap(bitmap1, 110, 120);
929     playbackCanvas_->DetachBrush();
930 
931     // 7.cilp:ClipRoundRect(G2)
932     auto rect = Drawing::Rect(250, 250, 400, 400);       // rect region (250, 250, 400, 400)
933     auto rrect = Drawing::RoundRect(rect, 30.0f, 30.0f); // 30.0f is angle
934     playbackCanvas_->Save();
935     playbackCanvas_->ClipRoundRect(rrect, Drawing::ClipOp::DIFFERENCE, true);
936     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
937     playbackCanvas_->Restore();
938 }
939 
940 // Bitmap构造接口:Bitmap_Build_L1_70
941 // Bitmap操作接口:SetFormat/GetFormat
942 // cilp:ClipRoundRect(G2_capsule)
943 // transform:null
944 // 抗锯齿:非AA
945 // 透明度:透明
946 // 视效:CreateBlendModeColorFilter
947 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 17)
948 {
949     /*
950      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
951      */
952     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
953     using namespace Drawing;
954     Drawing::Brush brush;
955     brush.SetAntiAlias(false); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
956 
957     // 2.创建Bitmap Bitmap_Build_L1_70
958     auto colorspace = Drawing::ColorSpace::CreateSRGB();
959     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
960     Drawing::Bitmap bitmap;
961     bitmap.Build(imageInfo);
962     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
963 
964     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
965     // Bitmap操作接口:SetFormat/GetFormat
966     Drawing::Bitmap bitmap1 = BuildRandomBitmap();
967     bitmap1.SetFormat(bitmap.GetFormat());
968     bitmap1.ClearWithColor(0x004567FA); // 透明,粉蓝色
969 
970     // 4.视效:CreateBlendModeColorFilter
971 
972     brush.SetColor(0xFFFF0000); // 红色
973 
974     for (auto blendMode : blendModes) {
975         std::shared_ptr<Drawing::ColorFilter> colorFilter =
976             Drawing::ColorFilter::CreateBlendModeColorFilter(0xFFFF0000, blendMode);
977         auto filter = Drawing::Filter();
978         filter.SetColorFilter(colorFilter);
979         brush.SetFilter(filter);
980         // 绘制结果
981         playbackCanvas_->AttachBrush(brush);
982         playbackCanvas_->DrawBitmap(bitmap, 100, 100); // 100,100 is bitmap position
983         playbackCanvas_->DrawBitmap(bitmap1, 110, 120);
984         playbackCanvas_->DetachBrush();
985     }
986 
987     // 5.cilp:ClipRoundRect(G2_capsule)
988     auto rect = Drawing::Rect(250, 300, 400, 500);       // rect region (250, 300, 400, 500)
989     auto rrect = Drawing::RoundRect(rect, 50.0f, 50.0f); // 50.0f is angle
990     playbackCanvas_->Save();
991     playbackCanvas_->ClipRoundRect(rrect, Drawing::ClipOp::DIFFERENCE, false);
992     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
993     playbackCanvas_->Restore();
994 }
995 
996 // Bitmap构造接口:Bitmap_Build_L1_70
997 // Bitmap操作接口:GetPixmap
998 // cilp:ClipRoundRect(非G2)
999 // transform:ConcatMatrix
1000 // 抗锯齿:AA
1001 // 透明度:半透明
1002 // 视效:null
1003 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 18)
1004 {
1005     /*
1006      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
1007      */
1008     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
1009     using namespace Drawing;
1010     Drawing::Brush brush;
1011     brush.SetAntiAlias(true); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
1012 
1013     // 2.创建Bitmap Bitmap_Build_L1_70
1014     auto colorspace = Drawing::ColorSpace::CreateSRGB();
1015     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
1016     Drawing::Bitmap bitmap;
1017     bitmap.Build(imageInfo);
1018     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
1019 
1020     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
1021     Drawing::Bitmap bitmap1;
1022     bitmap1.Build(imageInfo);
1023     // Bitmap操作接口:GetPixmap
1024     auto image = Drawing::Image::MakeFromRaster(bitmap1.GetPixmap(), nullptr, nullptr);
1025     bitmap1.ClearWithColor(0x894567FA); // 半透明 粉蓝色
1026 
1027     // 4.transform:ConcatMatrix
1028     Drawing::Matrix matrix;
1029     matrix.Rotate(15, 10, 10); // 15 angle 10 position
1030     playbackCanvas_->ConcatMatrix(matrix);
1031 
1032     // 5.绘制结果
1033     playbackCanvas_->AttachBrush(brush);
1034     playbackCanvas_->DrawBitmap(bitmap, 200, 200); // 200,200 is bitmap position
1035     playbackCanvas_->DrawImage(*image, 250, 300, SamplingOptions());
1036     playbackCanvas_->DetachBrush();
1037 
1038     // 6.cilp:ClipRoundRect(G2)
1039     auto rect = Drawing::Rect(300, 300, 400, 400);       // rect region (300, 300, 400, 400)
1040     auto rrect = Drawing::RoundRect(rect, 30.0f, 30.0f); // 30.0f is angle
1041     playbackCanvas_->Save();
1042     playbackCanvas_->ClipRoundRect(rrect, Drawing::ClipOp::DIFFERENCE, true);
1043     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
1044     playbackCanvas_->Restore();
1045 }
1046 
1047 // Bitmap构造接口:Bitmap_Build_L1_70
1048 // Bitmap操作接口:MakeImage
1049 // cilp:null
1050 // transform:Rotate
1051 // 抗锯齿:非AA
1052 // 透明度:不透明
1053 // 视效:CreateLinearGradient
1054 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 19)
1055 {
1056     /*
1057      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
1058      */
1059     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
1060     using namespace Drawing;
1061     Drawing::Brush brush;
1062     brush.SetAntiAlias(false); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
1063 
1064     // 2.创建Bitmap Bitmap_Build_L1_70
1065     auto colorspace = Drawing::ColorSpace::CreateSRGB();
1066     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
1067     Drawing::Bitmap bitmap;
1068     bitmap.Build(imageInfo);
1069     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
1070 
1071     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
1072     // GetRowBytes
1073     Drawing::Bitmap bitmap1;
1074     bitmap.Build(imageInfo);
1075     std::shared_ptr<Image> image = bitmap1.MakeImage();
1076     bitmap1.ClearWithColor(0xFF4567FA); // 不透明 粉蓝色
1077 
1078     // 4.transform:Rotate
1079     playbackCanvas_->Rotate(30, 10, 10); // 30 angle 10 position
1080 
1081     // 5.视效:CreateLinearGradient
1082     std::vector<Drawing::ColorQuad> colors = { Drawing::Color::COLOR_RED, Drawing::Color::COLOR_GREEN,
1083         Drawing::Color::COLOR_BLUE };
1084     std::vector<Drawing::scalar> pos = { 0.00f, 0.50f, 1.00f };
1085     auto linearGradient = Drawing::ShaderEffect::CreateLinearGradient(
1086         { 0, 0 }, { 1000, 1000 }, colors, pos, Drawing::TileMode::CLAMP); // 0 start pos & 1000 end pos
1087     brush.SetShaderEffect(linearGradient);
1088 
1089     // 6.绘制结果
1090     playbackCanvas_->AttachBrush(brush);
1091     playbackCanvas_->DrawBitmap(bitmap, 200, 200); // 200,200 is bitmap position
1092     playbackCanvas_->DrawImage(*image, 250, 300, SamplingOptions());
1093     playbackCanvas_->DetachBrush();
1094 }
1095 
1096 // Bitmap构造接口:Bitmap_Build_L1_70
1097 // Bitmap操作接口:SetImmutable/IsImmutable
1098 // cilp:ClipPath
1099 // transform:Scale(正常值)
1100 // 抗锯齿:AA
1101 // 透明度:透明
1102 // 视效:CreateColorShader
1103 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 20)
1104 {
1105     /*
1106      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
1107      */
1108     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
1109     using namespace Drawing;
1110     Drawing::Brush brush;
1111     brush.SetAntiAlias(true); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
1112 
1113     // 2.创建Bitmap Bitmap_Build_L1_70
1114     auto colorspace = Drawing::ColorSpace::CreateSRGB();
1115     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
1116     Drawing::Bitmap bitmap;
1117     bitmap.Build(imageInfo);
1118     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
1119 
1120     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
1121     Drawing::Bitmap bitmap1;
1122     bitmap1.Build(imageInfo);
1123     // Bitmap操作接口:SetImmutable/IsImmutable
1124     bitmap1.ClearWithColor(0x004567FA); // 透明效果,粉蓝色
1125     bitmap1.SetImmutable();
1126     if (bitmap1.IsImmutable()) {
1127         playbackCanvas_->DrawBackground(0xFF675800); // 深棕榈
1128     }
1129 
1130     // 4.transform:Scale(正常值)
1131     playbackCanvas_->Scale(2.0f, 2.0f); // ratio
1132 
1133     // 5.视效:CreateColorShader
1134     brush.SetColor(0xFFFF0000); // 红色
1135     auto colorShader = Drawing::ShaderEffect::CreateColorShader(Drawing::Color::COLOR_RED);
1136     brush.SetShaderEffect(colorShader);
1137     // 绘制结果
1138     playbackCanvas_->AttachBrush(brush);
1139     playbackCanvas_->DrawBitmap(bitmap, 100, 100); // 100,100 is bitmap position
1140     playbackCanvas_->DrawBitmap(bitmap1, 110, 120);
1141     playbackCanvas_->DetachBrush();
1142 
1143     // 6.cilp:ClipPath
1144     Drawing::Path path;
1145     path.AddRect({ 200, 300, 700, 800 }); // rect region (200, 300, 700, 800)
1146     path.SetFillStyle(Drawing::PathFillType::INVERSE_WINDING);
1147     playbackCanvas_->Save();
1148     playbackCanvas_->ClipPath(path, Drawing::ClipOp::DIFFERENCE, true);
1149     playbackCanvas_->Clear(Drawing::Color::COLOR_GREEN);
1150     playbackCanvas_->Restore();
1151 }
1152 
1153 // Bitmap_Scene_0501
1154 // Bitmap构造接口:Bitmap_Build_L1_70
1155 // Bitmap操作接口:ClearWithColor
1156 // cilp:ClipRect
1157 // transform:Scale(极大值)
1158 // 抗锯齿:非AA
1159 // 透明度:半透明
1160 // 视效:CreateBlurImageFilter
1161 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 21)
1162 {
1163     /*
1164      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
1165      */
1166     // 1.创建笔刷
1167     using namespace Drawing;
1168     Drawing::Brush brush;
1169     brush.SetAntiAlias(false); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
1170 
1171     // 2.创建Bitmap
1172     auto colorspace = Drawing::ColorSpace::CreateSRGB();
1173     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
1174     Drawing::Bitmap bitmap;
1175     bitmap.Build(imageInfo);
1176     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
1177 
1178     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
1179     Drawing::Bitmap bitmap1;
1180     bitmap1.Build(imageInfo);
1181     bitmap1.ClearWithColor(0x894567FA); // 半透明,粉蓝色
1182 
1183     // 4.组合transform函数,Scale(极大值)
1184     playbackCanvas_->Scale(1.0f, 10100.0f); // ratio
1185 
1186     // 5.设置视效效果
1187     brush.SetColor(0xFFFF0000);
1188     auto filter = Drawing::Filter();
1189     filter.SetImageFilter(Drawing::ImageFilter::CreateBlurImageFilter(
1190         10.0f, 10.0f, Drawing::TileMode::CLAMP, nullptr, Drawing::ImageBlurType::GAUSS));
1191     brush.SetFilter(filter);
1192 
1193     // 6.绘制结果
1194     playbackCanvas_->AttachBrush(brush);
1195     playbackCanvas_->DrawBitmap(bitmap, 100, 100); // 100,100 is bitmap position
1196     playbackCanvas_->DrawBitmap(bitmap1, 110, 120);
1197     playbackCanvas_->DetachBrush();
1198 
1199     // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致
1200     auto rect = Drawing::Rect(250, 300, 500, 500); // rect region (250, 300, 500, 500)
1201     playbackCanvas_->Save();
1202     playbackCanvas_->ClipRect(rect, Drawing::ClipOp::DIFFERENCE, false);
1203     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
1204     playbackCanvas_->Restore();
1205 }
1206 
1207 // Bitmap_Scene_0502
1208 // Bitmap构造接口:Bitmap_Build_L1_70
1209 // Bitmap操作接口:ExtractSubset
1210 // cilp:ClipRoundRect(G2)
1211 // transform:Scale(极小值)
1212 // 抗锯齿:AA
1213 // 透明度:不透明
1214 // 视效:CreateBlendModeColorFilter
1215 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 22)
1216 {
1217     /*
1218      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
1219      */
1220     // 1.创建笔刷
1221     using namespace Drawing;
1222     Drawing::Brush brush;
1223     brush.SetAntiAlias(true); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
1224 
1225     // 2.创建Bitmap
1226     auto colorspace = Drawing::ColorSpace::CreateSRGB();
1227     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
1228     Drawing::Bitmap bitmap;
1229     bitmap.Build(imageInfo);
1230     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
1231 
1232     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
1233     Drawing::Bitmap bitmap1;
1234     bitmap1.Build(imageInfo);
1235     bitmap1.ClearWithColor(0xFF4567FA);                    // 不透明,粉蓝色
1236     if (bitmap1.ExtractSubset(bitmap, Rect(0, 1, 2, 2))) { // rect(0, 1, 2, 2)
1237         playbackCanvas_->DrawBackground(0xFF675800);       // 深棕榈
1238     }
1239 
1240     // 4.组合transform函数,Scale(极小值)
1241     playbackCanvas_->Scale(10100.0f, 1.0f); // ratio
1242 
1243     // 5.设置视效效果
1244     brush.SetColor(0xFFFF0000);
1245 
1246     for (auto blendMode : blendModes) {
1247         std::shared_ptr<Drawing::ColorFilter> colorFilter =
1248             Drawing::ColorFilter::CreateBlendModeColorFilter(0xFFFF0000, blendMode);
1249         auto filter = Drawing::Filter();
1250         filter.SetColorFilter(colorFilter);
1251         brush.SetFilter(filter);
1252 
1253         // 6.绘制结果
1254         playbackCanvas_->AttachBrush(brush);
1255         playbackCanvas_->DrawBitmap(bitmap, 200, 200); // 200,200 is bitmap position
1256         playbackCanvas_->DrawBitmap(bitmap1, 250, 300);
1257         playbackCanvas_->DetachBrush();
1258     }
1259 
1260     // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致
1261     auto rect = Drawing::Rect(250, 300, 500, 500);       // rect region (250, 300, 500, 500)
1262     auto rrect = Drawing::RoundRect(rect, 30.0f, 30.0f); // 30.0f is angle
1263     playbackCanvas_->Save();
1264     playbackCanvas_->ClipRoundRect(rrect, Drawing::ClipOp::DIFFERENCE, true);
1265     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
1266     playbackCanvas_->Restore();
1267 }
1268 
1269 // Bitmap_Scene_0503
1270 // Bitmap构造接口:Bitmap_Build_L1_70
1271 // Bitmap操作接口:PeekPixels
1272 // cilp:ClipRoundRect(G2_capsule)
1273 // transform:Translate
1274 // 抗锯齿:非AA
1275 // 透明度:透明
1276 // 视效:CreateComposeColorFilter
1277 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 23)
1278 {
1279     /*
1280      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
1281      */
1282     // 1.创建笔刷
1283     using namespace Drawing;
1284     Drawing::Brush brush;
1285     brush.SetAntiAlias(false); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
1286 
1287     // 2.创建Bitmap
1288     auto colorspace = Drawing::ColorSpace::CreateSRGB();
1289     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
1290     Drawing::Bitmap bitmap;
1291     bitmap.Build(imageInfo);
1292     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
1293 
1294     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
1295     Drawing::Bitmap bitmap1;
1296     Drawing::Pixmap pixmap;
1297     bitmap1.Build(imageInfo);
1298     bitmap1.ClearWithColor(0x004567FA); // 透明,粉蓝色
1299     if (bitmap1.PeekPixels(pixmap)) {
1300         auto image = Image::MakeFromRaster(pixmap, nullptr, nullptr);
1301 
1302         // 4.组合transform函数,Translate
1303         playbackCanvas_->Translate(200, 200); // 200 distance
1304 
1305         // 5.设置视效效果
1306         brush.SetColor(0xFFFF0000);
1307         for (auto blendMode1 : blendModes) {
1308             std::shared_ptr<Drawing::ColorFilter> colorFilter1 =
1309                 Drawing::ColorFilter::CreateBlendModeColorFilter(0xFFFF0000, blendMode1);
1310             for (auto blendMode2 : blendModes) {
1311                 std::shared_ptr<Drawing::ColorFilter> colorFilter2 =
1312                     Drawing::ColorFilter::CreateBlendModeColorFilter(0xFFFF00FF, blendMode2);
1313                 std::shared_ptr<Drawing::ColorFilter> colorFilter3 =
1314                     Drawing::ColorFilter::CreateComposeColorFilter(*colorFilter1, *colorFilter2);
1315                 auto filter = Drawing::Filter();
1316                 filter.SetColorFilter(colorFilter3);
1317                 brush.SetFilter(filter);
1318 
1319                 // 6.绘制结果
1320                 playbackCanvas_->AttachBrush(brush);
1321                 playbackCanvas_->DrawBitmap(bitmap, 200, 200); // 200,200 is bitmap position
1322                 playbackCanvas_->DrawImage(*image, 250, 300, SamplingOptions());
1323             }
1324         }
1325         playbackCanvas_->DetachBrush();
1326 
1327         // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致
1328         auto rect = Drawing::Rect(250, 300, 500, 500);       // rect region (250, 300, 500, 500)
1329         auto rrect = Drawing::RoundRect(rect, 50.0f, 50.0f); // 50.0f is angle
1330         playbackCanvas_->Save();
1331         playbackCanvas_->ClipRoundRect(rrect, Drawing::ClipOp::DIFFERENCE, false);
1332         playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
1333         playbackCanvas_->Restore();
1334     }
1335 }
1336 
1337 // Bitmap_Scene_0504
1338 // Bitmap构造接口:Bitmap_Build_L1_70
1339 // Bitmap操作接口:ReadPixels
1340 // cilp:ClipRoundRect(非G2)
1341 // transform:Shear
1342 // 抗锯齿:AA
1343 // 透明度:半透明
1344 // 视效:CreateMatrixColorFilter
1345 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 24)
1346 {
1347     /*
1348      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
1349      */
1350     // 1.创建笔刷
1351     using namespace Drawing;
1352     Drawing::Brush brush;
1353     brush.SetAntiAlias(true); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
1354 
1355     // 2.创建Bitmap
1356     auto colorspace = Drawing::ColorSpace::CreateSRGB();
1357     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
1358     Drawing::Bitmap bitmap;
1359     bitmap.Build(imageInfo);
1360     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
1361 
1362     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
1363     Drawing::Bitmap bitmap1;
1364     bitmap1.Build(imageInfo);
1365     bitmap1.ClearWithColor(0x894567FA);            // 半透明,粉蓝色
1366     auto imageInfo1 = Drawing::ImageInfo(500, 500, // 500 width & Height
1367         Drawing::COLORTYPE_UNKNOWN, Drawing::ALPHATYPE_UNKNOWN);
1368     bitmap1.ReadPixels(imageInfo1, bitmap.GetPixels(), bitmap.GetRowBytes(), 50, 50); // (50, 50) is position
1369 
1370     // 4.组合transform函数,Shear
1371     playbackCanvas_->Shear(10.0f, 10.0f); // slope
1372 
1373     // 5.设置视效效果
1374     Drawing::ColorMatrix matrix;
1375     matrix.SetArray(ARR);
1376     auto cf = Drawing::ColorFilter::CreateMatrixColorFilter(matrix);
1377     auto filter = Drawing::Filter();
1378     filter.SetImageFilter(Drawing::ImageFilter::CreateColorFilterImageFilter(*cf, nullptr));
1379     brush.SetFilter(filter);
1380 
1381     // 6.绘制结果
1382     playbackCanvas_->AttachBrush(brush);
1383     playbackCanvas_->DrawBitmap(bitmap, 100, 100); // 100,100 is bitmap position
1384     playbackCanvas_->DrawBitmap(bitmap1, 110, 120);
1385     playbackCanvas_->DetachBrush();
1386 
1387     // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致
1388     auto rect = Drawing::Rect(250, 300, 500, 500);       // rect region (250, 300, 500, 500)
1389     auto rrect = Drawing::RoundRect(rect, 30.0f, 30.0f); // 30.0f is angle
1390     playbackCanvas_->Save();
1391     playbackCanvas_->ClipRoundRect(rrect, Drawing::ClipOp::DIFFERENCE, true);
1392     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
1393     playbackCanvas_->Restore();
1394 }
1395 
1396 // Bitmap_Scene_0505
1397 // Bitmap构造接口:Bitmap_Build_L1_70
1398 // Bitmap操作接口:CopyPixels
1399 // cilp:null
1400 // transform:null
1401 // 抗锯齿:非AA
1402 // 透明度:不透明
1403 // 视效:CreateLinearToSrgbGamma
1404 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 25)
1405 {
1406     /*
1407      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
1408      */
1409     // 1.创建笔刷
1410     using namespace Drawing;
1411     Drawing::Brush brush;
1412     brush.SetAntiAlias(false); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
1413 
1414     // 2.创建Bitmap
1415     auto colorspace = Drawing::ColorSpace::CreateSRGB();
1416     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
1417     Drawing::Bitmap bitmap;
1418     bitmap.Build(imageInfo);
1419     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
1420 
1421     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
1422     Drawing::Bitmap bitmap1;
1423     bitmap1.Build(imageInfo);
1424     bitmap1.ClearWithColor(0xFF4567FA); // 不透明,粉蓝色
1425     bitmap1.CopyPixels(bitmap, 50, 50); // 50 width & Height
1426 
1427     // 4.组合transform函数,null
1428 
1429     // 5.设置视效效果
1430     brush.SetColor(0xFF4F7091);
1431     auto filter = Drawing::Filter();
1432     filter.SetColorFilter(Drawing::ColorFilter::CreateLinearToSrgbGamma());
1433     brush.SetFilter(filter);
1434 
1435     // 6.绘制结果
1436     playbackCanvas_->AttachBrush(brush);
1437     playbackCanvas_->DrawBitmap(bitmap, 100, 100); // 100,100 is bitmap position
1438     playbackCanvas_->DrawBitmap(bitmap1, 110, 120);
1439     playbackCanvas_->DetachBrush();
1440 
1441     // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致,null
1442 }
1443 
1444 // Bitmap_Scene_0506
1445 // Bitmap构造接口:Bitmap_Build_L1_70
1446 // Bitmap操作接口:InstallPixels
1447 // cilp:ClipPath
1448 // transform:ConcatMatrix
1449 // 抗锯齿:AA
1450 // 透明度:透明
1451 // 视效:CreateSrgbGammaToLinear
1452 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 26)
1453 {
1454     /*
1455      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
1456      */
1457     // 1.创建笔刷
1458     using namespace Drawing;
1459     Drawing::Brush brush;
1460     brush.SetAntiAlias(true); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
1461 
1462     // 2.创建Bitmap
1463     auto colorspace = Drawing::ColorSpace::CreateSRGB();
1464     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
1465     Drawing::Bitmap bitmap;
1466     bitmap.Build(imageInfo);
1467     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
1468 
1469     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
1470     Drawing::Bitmap bitmap1;
1471     bitmap1.Build(imageInfo);
1472     bitmap1.ClearWithColor(0x004567FA); // 透明,粉蓝色
1473     uint32_t pixels[][5] = { { 0xBFA12345, 0xCB9745D2, 0xD0ACB2F4, 0xD34A1234, 0xCDE7AB9F },
1474         { 0xD98289C1, 0xC56A2F1A, 0xF3A807CC, 0xBD31C9A2, 0xF05A5378 },
1475         { 0xCF19A7E4, 0xF29074BD, 0xC0C35F1A, 0xE73812A7, 0xD98E2B43 },
1476         { 0xB6F10D34, 0xD98289C1, 0xC9A4527A, 0xC03D15A2, 0xF4B2C380 },
1477         { 0xBF1D68A3, 0xE5A3D1C4, 0xCBF722ED, 0xD7A9BC64, 0xB4C5F219 } };
1478     if (bitmap1.InstallPixels(imageInfo, pixels, bitmap.GetRowBytes())) {
1479         Drawing::Image image;
1480         image.BuildFromBitmap(bitmap1);
1481 
1482         // 4.组合transform函数,ConcatMatrix
1483         Drawing::Matrix matrix;
1484         matrix.Rotate(15, 10, 10); // 15 angle 10 position
1485         playbackCanvas_->ConcatMatrix(matrix);
1486 
1487         // 5.设置视效效果
1488         brush.SetColor(0xFF4F7091);
1489         auto filter = Drawing::Filter();
1490         filter.SetColorFilter(Drawing::ColorFilter::CreateSrgbGammaToLinear());
1491         brush.SetFilter(filter);
1492 
1493         // 6.绘制结果
1494         playbackCanvas_->AttachBrush(brush);
1495         playbackCanvas_->DrawBitmap(bitmap, 100, 100); // 100,100 is bitmap position
1496         playbackCanvas_->DrawImage(image, 110, 120, SamplingOptions());
1497         playbackCanvas_->DetachBrush();
1498 
1499         // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致
1500         Drawing::Path path;
1501         path.AddRect({ 200, 300, 700, 800 }); // rect region (200, 300, 700, 800)
1502         path.SetFillStyle(Drawing::PathFillType::INVERSE_WINDING);
1503         playbackCanvas_->Save();
1504         playbackCanvas_->ClipPath(path, Drawing::ClipOp::DIFFERENCE, true);
1505         playbackCanvas_->Clear(Drawing::Color::COLOR_GREEN);
1506         playbackCanvas_->Restore();
1507     }
1508 }
1509 
1510 // Bitmap_Scene_0507
1511 // Bitmap构造接口:Bitmap_Build_L1_70
1512 // Bitmap操作接口:Serialize/Deserialize
1513 // cilp:ClipRect
1514 // transform:Rotate
1515 // 抗锯齿:非AA
1516 // 透明度:半透明
1517 // 视效:CreateLumaColorFilter
1518 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 27)
1519 {
1520     /*
1521      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
1522      */
1523     // 1.创建笔刷
1524     using namespace Drawing;
1525     Drawing::Brush brush;
1526     brush.SetAntiAlias(false); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
1527 
1528     // 2.创建Bitmap
1529     auto colorspace = Drawing::ColorSpace::CreateSRGB();
1530     auto imageInfo = ImageInfo(511, 844, COLORTYPE_N32, ALPHATYPE_UNKNOWN, colorspace); // 511 width & 844 height
1531     Drawing::Bitmap bitmap;
1532     bitmap.Build(imageInfo);
1533     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
1534 
1535     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
1536     Drawing::Bitmap bitmap1;
1537     bitmap1.Build(imageInfo);
1538     bitmap1.ClearWithColor(0x894567FA); // 半透明,粉蓝色
1539     auto data = bitmap1.Serialize();
1540     if (bitmap1.Deserialize(data)) {
1541         playbackCanvas_->DrawBackground(0xFF675800); // 深棕榈
1542     }
1543 
1544     // 4.组合transform函数,Rotate
1545     playbackCanvas_->Rotate(30, 10, 10); // 30 angle 10 position
1546 
1547     // 5.设置视效效果
1548     brush.SetColor(0xFF0000FF);
1549     auto filter = Drawing::Filter();
1550     filter.SetColorFilter(Drawing::ColorFilter::CreateLumaColorFilter());
1551     brush.SetFilter(filter);
1552 
1553     // 6.绘制结果
1554     playbackCanvas_->AttachBrush(brush);
1555     playbackCanvas_->DrawBitmap(bitmap, 100, 100); // 100,100 is bitmap position
1556     playbackCanvas_->DrawBitmap(bitmap1, 110, 120);
1557     playbackCanvas_->DetachBrush();
1558 
1559     // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致
1560     auto rect = Drawing::Rect(250, 300, 500, 500); // rect region (250, 300, 500, 500)
1561     playbackCanvas_->Save();
1562     playbackCanvas_->ClipRect(rect, Drawing::ClipOp::DIFFERENCE, false);
1563     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
1564     playbackCanvas_->Restore();
1565 }
1566 
1567 // Bitmap_Scene_0508
1568 // Bitmap构造接口:Bitmap_Build_L1_82
1569 // Bitmap操作接口:GetWidth
1570 // cilp:ClipRoundRect(非G2)
1571 // transform:Scale(极小值)
1572 // 抗锯齿:AA
1573 // 透明度:半透明
1574 // 视效:CreateColorShader
1575 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 28)
1576 {
1577     /*
1578      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
1579      */
1580     // 1.创建笔刷
1581     using namespace Drawing;
1582     Drawing::Brush brush;
1583     brush.SetAntiAlias(true); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
1584 
1585     // 2.创建Bitmap
1586     float srgb[3][3] = {
1587         {0.436065674f, 0.385147095f, 0.143066406f},
1588         {0.222488403f, 0.716873169f, 0.060607910f},
1589         {0.013916016f, 0.097076416f, 0.714096069f}
1590     };
1591     Drawing::CMSMatrix3x3 matrix;
1592     for (int i = 0; i < 3; ++i) {
1593         for (int j = 0; j < 3; ++j) {
1594             matrix.vals[i][j] = srgb[i][j];
1595         }
1596     }
1597     Drawing::CMSTransferFunction PQ = { -2.0f, -107 / 128.0f, 32 / 2523.0f, 2413 / 128.0f, -2392 / 128.0f,
1598         8192 / 1305.0f };
1599     auto colorspace = Drawing::ColorSpace::CreateCustomRGB(PQ, matrix);
1600     auto imageInfo = ImageInfo(511, 844, COLORTYPE_UNKNOWN, ALPHATYPE_UNKNOWN, colorspace);
1601     Drawing::Bitmap bitmap;
1602     bitmap.Build(imageInfo);
1603     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
1604 
1605     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
1606     Drawing::Bitmap bitmap1;
1607     bitmap1.Build(bitmap.GetWidth(), 500, bitmap.GetFormat()); // 500 is height
1608     bitmap1.ClearWithColor(0x894567FA);                        // 半透明,粉蓝色
1609 
1610     // 4.组合transform函数,Scale(极小值)
1611     playbackCanvas_->Scale(10100.0f, 1.0f); // ratio
1612 
1613     // 5.设置视效效果
1614     brush.SetColor(0xFFFF0000);
1615     auto colorShader = Drawing::ShaderEffect::CreateColorShader(Drawing::Color::COLOR_RED);
1616     brush.SetShaderEffect(colorShader);
1617 
1618     // 6.绘制结果
1619     playbackCanvas_->AttachBrush(brush);
1620     playbackCanvas_->DrawBitmap(bitmap, 100, 100); // 100,100 is bitmap position
1621     playbackCanvas_->DrawBitmap(bitmap1, 110, 120);
1622     playbackCanvas_->DetachBrush();
1623 
1624     // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致
1625     auto rect = Drawing::Rect(250, 300, 500, 500);       // rect region (250, 300, 500, 500)
1626     auto rrect = Drawing::RoundRect(rect, 30.0f, 30.0f); // 30.0f is angle
1627     playbackCanvas_->Save();
1628     playbackCanvas_->ClipRoundRect(rrect, Drawing::ClipOp::DIFFERENCE, true);
1629     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
1630     playbackCanvas_->Restore();
1631 }
1632 
1633 // Bitmap_Scene_0509
1634 // Bitmap构造接口:Bitmap_Build_L1_82
1635 // Bitmap操作接口:GetHeight
1636 // cilp:null
1637 // transform:Translate
1638 // 抗锯齿:非AA
1639 // 透明度:不透明
1640 // 视效:CreateBlurImageFilter
1641 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 29)
1642 {
1643     /*
1644      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
1645      */
1646     // 1.创建笔刷
1647     using namespace Drawing;
1648     Drawing::Brush brush;
1649     brush.SetAntiAlias(false); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
1650 
1651     // 2.创建Bitmap
1652     float srgb[3][3] = {
1653         {0.436065674f, 0.385147095f, 0.143066406f},
1654         {0.222488403f, 0.716873169f, 0.060607910f},
1655         {0.013916016f, 0.097076416f, 0.714096069f}
1656     };
1657     Drawing::CMSMatrix3x3 matrix;
1658     for (int i = 0; i < 3; ++i) {
1659         for (int j = 0; j < 3; ++j) {
1660             matrix.vals[i][j] = srgb[i][j];
1661         }
1662     }
1663     Drawing::CMSTransferFunction PQ = { -2.0f, -107 / 128.0f, 32 / 2523.0f, 2413 / 128.0f, -2392 / 128.0f,
1664         8192 / 1305.0f };
1665     auto colorspace = Drawing::ColorSpace::CreateCustomRGB(PQ, matrix);
1666     auto imageInfo = ImageInfo(511, 844, COLORTYPE_UNKNOWN, ALPHATYPE_UNKNOWN, colorspace);
1667     Drawing::Bitmap bitmap;
1668     bitmap.Build(imageInfo);
1669     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
1670 
1671     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
1672     Drawing::Bitmap bitmap1;
1673     bitmap1.Build(500, bitmap.GetHeight(), bitmap.GetFormat()); // 500 is width
1674     bitmap1.ClearWithColor(0xFF4567FA);                         // 不透明,粉蓝色
1675 
1676     // 4.组合transform函数,Translate
1677     playbackCanvas_->Translate(200, 200); // 200 distance
1678 
1679     // 5.设置视效效果
1680     brush.SetColor(0xFFFF0000);
1681     auto filter = Drawing::Filter();
1682     filter.SetImageFilter(Drawing::ImageFilter::CreateBlurImageFilter(
1683         10.0f, 10.0f, Drawing::TileMode::CLAMP, nullptr, Drawing::ImageBlurType::GAUSS));
1684     brush.SetFilter(filter);
1685 
1686     // 6.绘制结果
1687     playbackCanvas_->AttachBrush(brush);
1688     playbackCanvas_->DrawBitmap(bitmap, 100, 100); // 100,100 is bitmap position
1689     playbackCanvas_->DrawBitmap(bitmap1, 110, 120);
1690     playbackCanvas_->DetachBrush();
1691 
1692     // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致,null
1693 }
1694 
1695 // Bitmap_Scene_0510
1696 // Bitmap构造接口:Bitmap_Build_L1_82
1697 // Bitmap操作接口:GetColorType
1698 // cilp:ClipPath
1699 // transform:Shear
1700 // 抗锯齿:AA
1701 // 透明度:透明
1702 // 视效:CreateBlendModeColorFilter
1703 DEF_DTK(Bitmap_Scene17, TestLevel::L2, 30)
1704 {
1705     /*
1706      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
1707      */
1708     // 1.创建笔刷
1709     using namespace Drawing;
1710     Drawing::Brush brush;
1711     brush.SetAntiAlias(true); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
1712 
1713     // 2.创建Bitmap
1714     float srgb[3][3] = {
1715         {0.436065674f, 0.385147095f, 0.143066406f},
1716         {0.222488403f, 0.716873169f, 0.060607910f},
1717         {0.013916016f, 0.097076416f, 0.714096069f}
1718     };
1719     Drawing::CMSMatrix3x3 matrix;
1720     for (int i = 0; i < 3; ++i) {
1721         for (int j = 0; j < 3; ++j) {
1722             matrix.vals[i][j] = srgb[i][j];
1723         }
1724     }
1725     Drawing::CMSTransferFunction PQ = { -2.0f, -107 / 128.0f, 32 / 2523.0f, 2413 / 128.0f, -2392 / 128.0f,
1726         8192 / 1305.0f };
1727     auto colorspace = Drawing::ColorSpace::CreateCustomRGB(PQ, matrix);
1728     auto imageInfo = ImageInfo(511, 844, COLORTYPE_UNKNOWN, ALPHATYPE_UNKNOWN, colorspace);
1729     Drawing::Bitmap bitmap;
1730     bitmap.Build(imageInfo);
1731     bitmap.ClearWithColor(0xFF789645); // 固定为不透明,灰绿色
1732 
1733     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
1734     Drawing::Bitmap bitmap1;
1735     Drawing::BitmapFormat format1 { bitmap.GetColorType(), Drawing::AlphaType::ALPHATYPE_UNKNOWN };
1736     bitmap1.Build(500, 500, format1);   // 500 width & Height
1737     bitmap1.ClearWithColor(0x004567FA); // 透明,粉蓝色
1738 
1739     // 4.组合transform函数,Shear
1740     playbackCanvas_->Shear(10.0f, 10.0f); // slope
1741 
1742     // 5.设置视效效果
1743     brush.SetColor(0xFFFF0000);
1744     for (auto blendMode : blendModes) {
1745         std::shared_ptr<Drawing::ColorFilter> colorFilter =
1746             Drawing::ColorFilter::CreateBlendModeColorFilter(0xFFFF0000, blendMode);
1747         auto filter = Drawing::Filter();
1748         filter.SetColorFilter(colorFilter);
1749         brush.SetFilter(filter);
1750 
1751         // 6.绘制结果
1752         playbackCanvas_->AttachBrush(brush);
1753         playbackCanvas_->DrawBitmap(bitmap, 200, 200); // 200,200 is bitmap position
1754         playbackCanvas_->DrawBitmap(bitmap1, 250, 300);
1755         playbackCanvas_->DetachBrush();
1756     }
1757 
1758     // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致
1759     Drawing::Path path;
1760     path.AddRect({ 200, 300, 700, 800 }); // rect region (200, 300, 700, 800)
1761     path.SetFillStyle(Drawing::PathFillType::INVERSE_WINDING);
1762     playbackCanvas_->Save();
1763     playbackCanvas_->ClipPath(path, Drawing::ClipOp::DIFFERENCE, true);
1764     playbackCanvas_->Clear(Drawing::Color::COLOR_GREEN);
1765     playbackCanvas_->Restore();
1766 }
1767 
1768 } // namespace Rosen
1769 } // namespace OHOS