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