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