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