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