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