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