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