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