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