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