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