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