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