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