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