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