• 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_0931
25 // Bitmap构造接口:Bitmap_TryAllocPixels_L1_54
26 // Bitmap操作接口:IsEmpty
27 // cilp:null
28 // transform:Rotate
29 // 抗锯齿:非AA
30 // 透明度:不透明
31 // 视效:CreateLumaColorFilter
32 DEF_DTK(Bitmap_Scene32, TestLevel::L2, 1)
33 {
34     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
35     Drawing::Brush brush;
36     brush.SetAntiAlias(false); // 设置画刷抗锯齿
37     brush.SetColor(0xFF0000FF);
38 
39     // 2.创建Bitmap
40     // Bitmap_TryAllocPixels_L1_54
41     auto colorspace = Drawing::ColorSpace::CreateSRGB();
42     auto imageInfo = ImageInfo(511, 844, COLORTYPE_RGB_888X, ALPHATYPE_UNPREMUL, 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.Build(500, 500, bitmap.GetFormat()); // 500 width & Height
50     bitmap1.ClearWithColor(0xFF4567FA);          // 不透明粉蓝色
51 
52     // IsEmpty,创建Bitmap1的方式和Bitmap保持一致, 此处不展示
53     if (bitmap1.IsEmpty()) {
54         playbackCanvas_->DrawBackground(0xFF675800); // 深棕榈
55     }
56 
57     // 4.组合transform函数
58     // Rotate
59     playbackCanvas_->Rotate(30, 10, 10); // 30 angle 10 position
60 
61     // 5.设置视效效果,将效果添加到笔刷
62     // CreateLumaColorFilter
63     auto filter = Drawing::Filter();
64     filter.SetColorFilter(Drawing::ColorFilter::CreateLumaColorFilter());
65     brush.SetFilter(filter);
66 
67     // 6.绘制结果
68     playbackCanvas_->AttachBrush(brush);
69     playbackCanvas_->DrawBitmap(bitmap, 200, 200); // 200,200 is bitmap position
70     playbackCanvas_->DrawBitmap(bitmap1, 250, 300);
71     playbackCanvas_->DetachBrush();
72 }
73 
74 // Bitmap_Scene_0932
75 // Bitmap构造接口:Bitmap_TryAllocPixels_L1_54
76 // Bitmap操作接口:IsValid
77 // cilp:ClipPath
78 // transform:Scale(正常值)
79 // 抗锯齿:AA
80 // 透明度:透明
81 // 视效:CreateBlendImageFilter
82 DEF_DTK(Bitmap_Scene32, TestLevel::L2, 2)
83 {
84     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
85     Drawing::Brush brush;
86     brush.SetAntiAlias(true); // 设置画刷抗锯齿
87     brush.SetColor(0x4CB21933);
88 
89     // 2.创建Bitmap
90     // Bitmap_TryAllocPixels_L1_54
91     auto colorspace = Drawing::ColorSpace::CreateSRGB();
92     auto imageInfo = ImageInfo(511, 844, COLORTYPE_RGB_888X, ALPHATYPE_UNPREMUL, colorspace); // 511 width & 844 height
93     Drawing::Bitmap bitmap;
94     bitmap.TryAllocPixels(imageInfo);
95     bitmap.ClearWithColor(0xFF789645); // 灰绿色
96 
97     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
98     Drawing::Bitmap bitmap1;
99     bitmap1.Build(500, 500, bitmap.GetFormat()); // 500 width & Height
100     bitmap1.ClearWithColor(0x004567FA);          // 透明粉蓝色
101 
102     // IsValid,创建Bitmap1的方式和Bitmap保持一致, 此处不展示
103     if (bitmap1.IsValid()) {
104         playbackCanvas_->DrawBackground(0xFF675800); // 深棕榈
105     }
106 
107     // 4.组合transform函数
108     // Scale(正常值)
109     playbackCanvas_->Scale(2.0f, 2.0f); // ratio
110 
111     // 5.设置视效效果,将效果添加到笔刷
112     // CreateBlendImageFilter
113     for (auto blendMode : blendModes) {
114         auto background = Drawing::ImageFilter::CreateBlurImageFilter(
115             1.0f, 1.0f, Drawing::TileMode::REPEAT, nullptr, Drawing::ImageBlurType::GAUSS);
116         auto foreground = Drawing::ImageFilter::CreateBlurImageFilter(
117             1.0f, 1.0f, Drawing::TileMode::REPEAT, nullptr, Drawing::ImageBlurType::GAUSS);
118         auto filter = Drawing::Filter();
119         filter.SetImageFilter(Drawing::ImageFilter::CreateBlendImageFilter(blendMode, background, foreground));
120         brush.SetFilter(filter);
121 
122         // 6.绘制结果
123         playbackCanvas_->AttachBrush(brush);
124         playbackCanvas_->DrawBitmap(bitmap, 200, 200);  // 200,200 is bitmap position
125         playbackCanvas_->DrawBitmap(bitmap1, 250, 300); // 250,300 is bitmap1 position
126     }
127     playbackCanvas_->DetachBrush();
128 
129     // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致
130     // ClipPath
131     Drawing::Path path;
132     path.AddRect({ 200, 300, 700, 800 }); // rect region (200, 300, 700, 800)
133     path.SetFillStyle(Drawing::PathFillType::INVERSE_WINDING);
134     playbackCanvas_->Save();
135     playbackCanvas_->ClipPath(path, Drawing::ClipOp::DIFFERENCE, true);
136     playbackCanvas_->Clear(Drawing::Color::COLOR_GREEN);
137     playbackCanvas_->Restore();
138 }
139 
140 // Bitmap_Scene_0933
141 // Bitmap构造接口:Bitmap_TryAllocPixels_L1_54
142 // Bitmap操作接口:GetColor
143 // cilp:ClipRect
144 // transform:Scale(极大值)
145 // 抗锯齿:非AA
146 // 透明度:半透明
147 // 视效:CreateBlendShader
148 DEF_DTK(Bitmap_Scene32, TestLevel::L2, 3)
149 {
150     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
151     Drawing::Brush brush;
152     brush.SetAntiAlias(false); // 设置画刷抗锯齿
153     brush.SetColor(0xFFFF0000);
154 
155     // 2.创建Bitmap
156     // Bitmap_TryAllocPixels_L1_54
157     auto colorspace = Drawing::ColorSpace::CreateSRGB();
158     auto imageInfo = ImageInfo(511, 844, COLORTYPE_RGB_888X, ALPHATYPE_UNPREMUL, colorspace); // 511 width & 844 height
159     Drawing::Bitmap bitmap;
160     bitmap.TryAllocPixels(imageInfo);
161     bitmap.ClearWithColor(0xFF789645); // 灰绿色
162 
163     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
164     Drawing::Bitmap bitmap1;
165     bitmap1.Build(500, 500, bitmap.GetFormat()); // 500 width & Height
166     bitmap1.ClearWithColor(0x894567FA);          // 半透明粉蓝色
167 
168     // GetColor,创建Bitmap1的方式和Bitmap保持一致, 此处不展示
169     bitmap1.ClearWithColor(bitmap.GetColor(1, 1)); // 1 is color position
170 
171     // 4.组合transform函数
172     // Scale(极大值)
173     playbackCanvas_->Scale(1.0f, 10100.0f); // ratio
174 
175     // 5.设置视效效果,将效果添加到笔刷
176     // CreateBlendShader
177     auto dst = Drawing::ShaderEffect::CreateColorShader(Drawing::Color::COLOR_RED);
178     auto src = Drawing::ShaderEffect::CreateColorShader(Drawing::Color::COLOR_GREEN);
179     for (auto blendMode : blendModes) {
180         auto blendShader = Drawing::ShaderEffect::CreateBlendShader(*dst, *src, blendMode);
181         brush.SetShaderEffect(blendShader);
182         // 6.绘制结果
183         playbackCanvas_->AttachBrush(brush);
184         playbackCanvas_->DrawBitmap(bitmap, 200, 200);  // 200,200 is bitmap position
185         playbackCanvas_->DrawBitmap(bitmap1, 250, 300); // 250,300 is bitmap1 position
186     }
187     playbackCanvas_->DetachBrush();
188 
189     // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致
190     // ClipRect
191     auto rect = Drawing::Rect(250, 300, 500, 500); // rect region (250, 300, 500, 500)
192     playbackCanvas_->Save();
193     playbackCanvas_->ClipRect(rect, Drawing::ClipOp::DIFFERENCE, false);
194     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
195     playbackCanvas_->Restore();
196 }
197 
198 // Bitmap_Scene_0934
199 // Bitmap构造接口:Bitmap_TryAllocPixels_L1_54
200 // Bitmap操作接口:SetFormat/GetFormat
201 // cilp:ClipRoundRect(G2)
202 // transform:Scale(极小值)
203 // 抗锯齿:AA
204 // 透明度:不透明
205 // 视效:CreateBlurMaskFilter
206 DEF_DTK(Bitmap_Scene32, TestLevel::L2, 4)
207 {
208     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
209     Drawing::Brush brush;
210     brush.SetAntiAlias(true); // 设置画刷抗锯齿
211     brush.SetColor(0xFFFF0000);
212 
213     // 2.创建Bitmap
214     // Bitmap_TryAllocPixels_L1_54
215     auto colorspace = Drawing::ColorSpace::CreateSRGB();
216     auto imageInfo = ImageInfo(511, 844, COLORTYPE_RGB_888X, ALPHATYPE_UNPREMUL, colorspace); // 511 width & 844 height
217     Drawing::Bitmap bitmap;
218     bitmap.TryAllocPixels(imageInfo);
219     bitmap.ClearWithColor(0xFF789645); // 灰绿色
220 
221     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
222     // SetFormat/GetFormat, 固定bitmap1创建方式
223     Drawing::Bitmap bitmap1 = BuildRandomBitmap();
224     bitmap1.SetFormat(bitmap.GetFormat());
225     bitmap1.ClearWithColor(0xFF4567FA); // 不透明粉蓝色
226 
227     // 4.组合transform函数
228     // Scale(极小值)
229     playbackCanvas_->Scale(10100.0f, 1.0f); // ratio
230 
231     // 5.设置视效效果,将效果添加到笔刷
232     // CreateBlurMaskFilter
233     std::vector<Drawing::BlurType> blurTypes = { Drawing::BlurType::NORMAL, Drawing::BlurType::SOLID,
234         Drawing::BlurType::OUTER, Drawing::BlurType::INNER };
235     for (auto& blurType : blurTypes) {
236         auto filter = Drawing::Filter();
237         filter.SetMaskFilter(Drawing::MaskFilter::CreateBlurMaskFilter(blurType, 10.0f, true));
238         brush.SetFilter(filter);
239 
240         // 6.绘制结果
241         playbackCanvas_->AttachBrush(brush);
242         playbackCanvas_->DrawBitmap(bitmap, 200, 200);  // 200,200 is bitmap position
243         playbackCanvas_->DrawBitmap(bitmap1, 250, 300); // 250,300 is bitmap1 position
244     }
245     playbackCanvas_->DetachBrush();
246 
247     // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致
248     // ClipRoundRect(G2))
249     auto rect = Drawing::Rect(250, 250, 400, 400);       // rect region (250, 250, 400, 400)
250     auto rrect = Drawing::RoundRect(rect, 30.0f, 30.0f); // 30.0f is angle
251     playbackCanvas_->Save();
252     playbackCanvas_->ClipRoundRect(rrect, Drawing::ClipOp::DIFFERENCE, true);
253     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
254     playbackCanvas_->Restore();
255 }
256 
257 // Bitmap_Scene_0935
258 // Bitmap构造接口:Bitmap_TryAllocPixels_L1_54
259 // Bitmap操作接口:GetPixmap
260 // cilp:ClipRoundRect(G2_capsule)
261 // transform:Translate
262 // 抗锯齿:非AA
263 // 透明度:透明
264 // 视效:CreateSrgbGammaToLinear
265 DEF_DTK(Bitmap_Scene32, TestLevel::L2, 5)
266 {
267     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
268     Drawing::Brush brush;
269     brush.SetAntiAlias(false); // 设置画刷抗锯齿
270     brush.SetColor(0xFF4F7091);
271 
272     // 2.创建Bitmap
273     // Bitmap_TryAllocPixels_L1_54
274     auto colorspace = Drawing::ColorSpace::CreateSRGB();
275     auto imageInfo = ImageInfo(511, 844, COLORTYPE_RGB_888X, ALPHATYPE_UNPREMUL, colorspace); // 511 width & 844 height
276     Drawing::Bitmap bitmap;
277     bitmap.TryAllocPixels(imageInfo);
278     bitmap.ClearWithColor(0xFF789645); // 灰绿色
279 
280     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
281     Drawing::Bitmap bitmap1;
282     bitmap1.Build(500, 500, bitmap.GetFormat()); // 500 width & Height
283     bitmap1.ClearWithColor(0x004567FA);          // 透明粉蓝色
284 
285     // GetPixmap,创建Bitmap1的方式和Bitmap保持一致, 但最后绘制为image
286     auto image1 = Drawing::Image::MakeFromRaster(bitmap1.GetPixmap(), nullptr, nullptr);
287 
288     // 4.组合transform函数
289     // Translate
290     playbackCanvas_->Translate(200, 200); // 200 distance
291 
292     // 5.设置视效效果,将效果添加到笔刷
293     // CreateSrgbGammaToLinear
294     auto filter = Drawing::Filter();
295     filter.SetColorFilter(Drawing::ColorFilter::CreateSrgbGammaToLinear());
296     brush.SetFilter(filter);
297 
298     // 6.绘制结果
299     playbackCanvas_->AttachBrush(brush);
300     playbackCanvas_->DrawBitmap(bitmap, 200, 200); // 200,200 is bitmap position
301     playbackCanvas_->DrawImage(*image1, 250, 300, SamplingOptions());
302     playbackCanvas_->DetachBrush();
303 
304     // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致
305     // ClipRoundRect(G2_capsule))
306     auto rect = Drawing::Rect(250, 300, 400, 500);       // rect region (250, 300, 400, 500)
307     auto rrect = Drawing::RoundRect(rect, 50.0f, 50.0f); // 50.0f is angle
308     playbackCanvas_->Save();
309     playbackCanvas_->ClipRoundRect(rrect, Drawing::ClipOp::DIFFERENCE, false);
310     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
311     playbackCanvas_->Restore();
312 }
313 
314 // Bitmap_Scene_0936
315 // Bitmap构造接口:Bitmap_TryAllocPixels_L1_54
316 // Bitmap操作接口:MakeImage
317 // cilp:ClipRoundRect(非G2)
318 // transform:Shear
319 // 抗锯齿:AA
320 // 透明度:半透明
321 // 视效:CreateLumaColorFilter
322 DEF_DTK(Bitmap_Scene32, TestLevel::L2, 6)
323 {
324     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
325     Drawing::Brush brush;
326     brush.SetAntiAlias(true); // 设置画刷抗锯齿
327     brush.SetColor(0xFF0000FF);
328 
329     // 2.创建Bitmap
330     // Bitmap_TryAllocPixels_L1_54
331     auto colorspace = Drawing::ColorSpace::CreateSRGB();
332     auto imageInfo = ImageInfo(511, 844, COLORTYPE_RGB_888X, ALPHATYPE_UNPREMUL, colorspace); // 511 width & 844 height
333     Drawing::Bitmap bitmap;
334     bitmap.TryAllocPixels(imageInfo);
335     bitmap.ClearWithColor(0xFF789645); // 灰绿色
336 
337     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
338     Drawing::Bitmap bitmap1;
339     bitmap1.Build(500, 500, bitmap.GetFormat()); // 500 width & Height
340     bitmap1.ClearWithColor(0x894567FA);          // 半透明粉蓝色
341 
342     // MakeImage,创建Bitmap1的方式和Bitmap保持一致, 但最后绘制为image
343     std::shared_ptr<Image> image = bitmap1.MakeImage();
344 
345     // 4.组合transform函数
346     // Shear
347     playbackCanvas_->Shear(10.0f, 10.0f); // slope
348 
349     // 5.设置视效效果,将效果添加到笔刷
350     // CreateLumaColorFilter
351     auto filter = Drawing::Filter();
352     filter.SetColorFilter(Drawing::ColorFilter::CreateLumaColorFilter());
353     brush.SetFilter(filter);
354 
355     // 6.绘制结果
356     playbackCanvas_->AttachBrush(brush);
357     playbackCanvas_->DrawBitmap(bitmap, 200, 200); // 200,200 is bitmap position
358     playbackCanvas_->DrawImage(*image, 250, 300, SamplingOptions());
359     playbackCanvas_->DetachBrush();
360 
361     // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致
362     // ClipRoundRect(非G2))
363     auto rect = Drawing::Rect(300, 300, 400, 400);       // rect region (300, 300, 400, 400)
364     auto rrect = Drawing::RoundRect(rect, 30.0f, 30.0f); // 30.0f is angle
365     playbackCanvas_->Save();
366     playbackCanvas_->ClipRoundRect(rrect, Drawing::ClipOp::DIFFERENCE, true);
367     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
368     playbackCanvas_->Restore();
369 }
370 
371 // Bitmap_Scene_0937
372 // Bitmap构造接口:Bitmap_TryAllocPixels_L1_54
373 // Bitmap操作接口:SetImmutable/IsImmutable
374 // cilp:null
375 // transform:null
376 // 抗锯齿:非AA
377 // 透明度:不透明
378 // 视效:CreateBlendImageFilter
379 DEF_DTK(Bitmap_Scene32, TestLevel::L2, 7)
380 {
381     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
382     Drawing::Brush brush;
383     brush.SetAntiAlias(false); // 设置画刷抗锯齿
384 
385     // 2.创建Bitmap
386     // Bitmap_TryAllocPixels_L1_54
387     auto colorspace = Drawing::ColorSpace::CreateSRGB();
388     auto imageInfo = ImageInfo(511, 844, COLORTYPE_RGB_888X, ALPHATYPE_UNPREMUL, colorspace); // 511 width & 844 height
389     Drawing::Bitmap bitmap;
390     bitmap.TryAllocPixels(imageInfo);
391     bitmap.ClearWithColor(0xFF789645); // 灰绿色
392 
393     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
394     Drawing::Bitmap bitmap1;
395     bitmap1.Build(500, 500, bitmap.GetFormat()); // 500 width & Height
396     bitmap1.ClearWithColor(0xFF4567FA);          // 不透明粉蓝色
397 
398     // SetImmutable/IsImmutable,创建Bitmap1的方式和Bitmap保持一致, 此处不展示
399     bitmap1.SetImmutable();
400     if (bitmap1.IsImmutable()) {
401         playbackCanvas_->DrawBackground(0xFF675800); // 深棕榈
402     }
403 
404     // 5.设置视效效果,将效果添加到笔刷
405     // CreateBlendImageFilter
406     for (auto blendMode : blendModes) {
407         auto background = Drawing::ImageFilter::CreateBlurImageFilter(
408             1.0f, 1.0f, Drawing::TileMode::REPEAT, nullptr, Drawing::ImageBlurType::GAUSS);
409         auto foreground = Drawing::ImageFilter::CreateBlurImageFilter(
410             1.0f, 1.0f, Drawing::TileMode::REPEAT, nullptr, Drawing::ImageBlurType::GAUSS);
411         auto filter = Drawing::Filter();
412         filter.SetImageFilter(Drawing::ImageFilter::CreateBlendImageFilter(blendMode, background, foreground));
413         brush.SetFilter(filter);
414 
415         // 6.绘制结果
416         playbackCanvas_->AttachBrush(brush);
417         playbackCanvas_->DrawBitmap(bitmap, 200, 200);  // 200,200 is bitmap position
418         playbackCanvas_->DrawBitmap(bitmap1, 250, 300); // 250,300 is bitmap1 position
419     }
420     playbackCanvas_->DetachBrush();
421 
422     // 6.绘制结果
423     playbackCanvas_->AttachBrush(brush);
424     playbackCanvas_->DrawBitmap(bitmap, 200, 200); // 200,200 is bitmap position
425     playbackCanvas_->DrawBitmap(bitmap1, 250, 300);
426     playbackCanvas_->DetachBrush();
427 }
428 
429 // Bitmap_Scene_0938
430 // Bitmap构造接口:Bitmap_TryAllocPixels_L1_54
431 // Bitmap操作接口:ClearWithColor
432 // cilp:ClipPath
433 // transform:ConcatMatrix
434 // 抗锯齿:AA
435 // 透明度:透明
436 // 视效:CreateBlendShader
437 DEF_DTK(Bitmap_Scene32, TestLevel::L2, 8)
438 {
439     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
440     Drawing::Brush brush;
441     brush.SetAntiAlias(true); // 设置画刷抗锯齿
442     brush.SetColor(0xFFFF0000);
443 
444     // 2.创建Bitmap
445     // Bitmap_TryAllocPixels_L1_54
446     auto colorspace = Drawing::ColorSpace::CreateSRGB();
447     auto imageInfo = ImageInfo(511, 844, COLORTYPE_RGB_888X, ALPHATYPE_UNPREMUL, colorspace); // 511 width & 844 height
448     Drawing::Bitmap bitmap;
449     bitmap.TryAllocPixels(imageInfo);
450     bitmap.ClearWithColor(0xFF789645); // 灰绿色
451 
452     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
453     Drawing::Bitmap bitmap1;
454     bitmap1.Build(500, 500, bitmap.GetFormat()); // 500 width & Height
455 
456     // ClearWithColor,创建Bitmap1的方式和Bitmap保持一致, 此处不展示
457     bitmap1.ClearWithColor(0x004567FA); // 透明粉蓝色
458 
459     // 4.组合transform函数
460     // ConcatMatrix
461     Drawing::Matrix matrix;
462     matrix.Rotate(15, 10, 10); // 15 angle 10 position
463     playbackCanvas_->ConcatMatrix(matrix);
464 
465     // 5.设置视效效果,将效果添加到笔刷
466     // CreateBlendShader
467     auto dst = Drawing::ShaderEffect::CreateColorShader(Drawing::Color::COLOR_RED);
468     auto src = Drawing::ShaderEffect::CreateColorShader(Drawing::Color::COLOR_GREEN);
469     for (auto blendMode : blendModes) {
470         auto blendShader = Drawing::ShaderEffect::CreateBlendShader(*dst, *src, blendMode);
471         brush.SetShaderEffect(blendShader);
472         // 6.绘制结果
473         playbackCanvas_->AttachBrush(brush);
474         playbackCanvas_->DrawBitmap(bitmap, 200, 200);  // 200,200 is bitmap position
475         playbackCanvas_->DrawBitmap(bitmap1, 250, 300); // 250,300 is bitmap1 position
476     }
477     playbackCanvas_->DetachBrush();
478 
479     // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致
480     // ClipPath
481     Drawing::Path path;
482     path.AddRect({ 200, 300, 700, 800 }); // rect region (200, 300, 700, 800)
483     path.SetFillStyle(Drawing::PathFillType::INVERSE_WINDING);
484     playbackCanvas_->Save();
485     playbackCanvas_->ClipPath(path, Drawing::ClipOp::DIFFERENCE, true);
486     playbackCanvas_->Clear(Drawing::Color::COLOR_GREEN);
487     playbackCanvas_->Restore();
488 }
489 
490 // Bitmap_Scene_0939
491 // Bitmap构造接口:Bitmap_TryAllocPixels_L1_54
492 // Bitmap操作接口:ExtractSubset
493 // cilp:ClipRect
494 // transform:Rotate
495 // 抗锯齿:非AA
496 // 透明度:半透明
497 // 视效:CreateBlurMaskFilter
498 DEF_DTK(Bitmap_Scene32, TestLevel::L2, 9)
499 {
500     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
501     Drawing::Brush brush;
502     brush.SetAntiAlias(false); // 设置画刷抗锯齿
503     brush.SetColor(0xFFFF0000);
504 
505     // 2.创建Bitmap
506     // Bitmap_TryAllocPixels_L1_54
507     auto colorspace = Drawing::ColorSpace::CreateSRGB();
508     auto imageInfo = ImageInfo(511, 844, COLORTYPE_RGB_888X, ALPHATYPE_UNPREMUL, colorspace); // 511 width & 844 height
509     Drawing::Bitmap bitmap;
510     bitmap.TryAllocPixels(imageInfo);
511     bitmap.ClearWithColor(0xFF789645); // 灰绿色
512 
513     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
514     Drawing::Bitmap bitmap1;
515     bitmap1.Build(500, 500, bitmap.GetFormat()); // 500 width & Height
516     bitmap1.ClearWithColor(0x894567FA);          // 半透明粉蓝色
517 
518     // ExtractSubset,创建Bitmap1的方式和Bitmap保持一致, 此处不展示
519     if (bitmap1.ExtractSubset(bitmap, Rect(0, 1, 2, 2))) {
520         playbackCanvas_->DrawBackground(0xFF675800); // 深棕榈
521     }
522 
523     // 4.组合transform函数
524     // Rotate
525     playbackCanvas_->Rotate(30, 10, 10); // 30 angle 10 position
526 
527     // 5.设置视效效果,将效果添加到笔刷
528     // CreateBlurMaskFilter
529     std::vector<Drawing::BlurType> blurTypes = { Drawing::BlurType::NORMAL, Drawing::BlurType::SOLID,
530         Drawing::BlurType::OUTER, Drawing::BlurType::INNER };
531     for (auto& blurType : blurTypes) {
532         auto filter = Drawing::Filter();
533         filter.SetMaskFilter(Drawing::MaskFilter::CreateBlurMaskFilter(blurType, 10.0f, true));
534         brush.SetFilter(filter);
535 
536         // 6.绘制结果
537         playbackCanvas_->AttachBrush(brush);
538         playbackCanvas_->DrawBitmap(bitmap, 200, 200);  // 200,200 is bitmap position
539         playbackCanvas_->DrawBitmap(bitmap1, 250, 300); // 250,300 is bitmap1 position
540     }
541     playbackCanvas_->DetachBrush();
542 
543     // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致
544     // ClipRect
545     auto rect = Drawing::Rect(250, 300, 500, 500); // rect region (250, 300, 500, 500)
546     playbackCanvas_->Save();
547     playbackCanvas_->ClipRect(rect, Drawing::ClipOp::DIFFERENCE, false);
548     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
549     playbackCanvas_->Restore();
550 }
551 
552 // Bitmap_Scene_0940
553 // Bitmap构造接口:Bitmap_TryAllocPixels_L1_54
554 // Bitmap操作接口:PeekPixels
555 // cilp:ClipRoundRect(G2)
556 // transform:Scale(正常值)
557 // 抗锯齿:AA
558 // 透明度:不透明
559 // 视效:null
560 DEF_DTK(Bitmap_Scene32, TestLevel::L2, 10)
561 {
562     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
563     Drawing::Brush brush;
564     brush.SetAntiAlias(true); // 设置画刷抗锯齿
565 
566     // 2.创建Bitmap
567     // Bitmap_TryAllocPixels_L1_54
568     auto colorspace = Drawing::ColorSpace::CreateSRGB();
569     auto imageInfo = ImageInfo(511, 844, COLORTYPE_RGB_888X, ALPHATYPE_UNPREMUL, colorspace); // 511 width & 844 height
570     Drawing::Bitmap bitmap;
571     bitmap.TryAllocPixels(imageInfo);
572     bitmap.ClearWithColor(0xFF789645); // 灰绿色
573 
574     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
575     Drawing::Bitmap bitmap1;
576     bitmap1.Build(500, 500, bitmap.GetFormat()); // 500 width & Height
577     bitmap1.ClearWithColor(0xFF4567FA);          // 不透明粉蓝色
578 
579     // PeekPixels,最终绘制为Image,创建Bitmap1的方式和Bitmap保持一致, 此处不展示
580     Drawing::Pixmap pixmap;
581     if (bitmap1.PeekPixels(pixmap)) {
582         auto image = Image::MakeFromRaster(pixmap, nullptr, nullptr);
583 
584         // 4.组合transform函数
585         // Scale(正常值)
586         playbackCanvas_->Scale(2.0f, 2.0f); // ratio
587 
588         // 6.绘制结果
589         playbackCanvas_->AttachBrush(brush);
590         playbackCanvas_->DrawBitmap(bitmap, 200, 200); // 200,200 is bitmap position
591         playbackCanvas_->DrawImage(*image, 250, 300, SamplingOptions());
592         playbackCanvas_->DetachBrush();
593 
594         // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致
595         // ClipRoundRect(G2))
596         auto rect = Drawing::Rect(250, 250, 400, 400);       // rect region (250, 250, 400, 400)
597         auto rrect = Drawing::RoundRect(rect, 30.0f, 30.0f); // 30.0f is angle
598         playbackCanvas_->Save();
599         playbackCanvas_->ClipRoundRect(rrect, Drawing::ClipOp::DIFFERENCE, true);
600         playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
601         playbackCanvas_->Restore();
602     }
603 }
604 
605 // Bitmap_Scene_0941
606 // Bitmap构造接口:Bitmap_TryAllocPixels_L1_54
607 // Bitmap操作接口:ReadPixels
608 // cilp:ClipRoundRect(G2_capsule)
609 // transform:Scale(极大值)
610 // 抗锯齿:非AA
611 // 透明度:透明
612 // 视效:CreateLinearGradient
613 DEF_DTK(Bitmap_Scene94, TestLevel::L2, 11)
614 {
615     /*
616      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
617      */
618     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
619     using namespace Drawing;
620     Drawing::Brush brush;
621     brush.SetAntiAlias(false); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
622 
623     // 2.创建Bitmap
624     auto colorspace = Drawing::ColorSpace::CreateSRGB();
625     auto imageInfo = ImageInfo(511, 844, COLORTYPE_RGB_888X, ALPHATYPE_UNPREMUL, colorspace); // 511 width & 844 height
626     Drawing::Bitmap bitmap;
627     bitmap.TryAllocPixels(imageInfo);
628     bitmap.ClearWithColor(0xFF789645); // 灰绿色
629 
630     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
631     Drawing::Bitmap bitmap1;
632     bitmap1.TryAllocPixels(imageInfo);
633     bitmap1.ClearWithColor(0x004567FA); // 透明效果,粉蓝色
634     auto imageInfo1 = Drawing::ImageInfo(500, 500, Drawing::ColorType::COLORTYPE_UNKNOWN, Drawing::ALPHATYPE_UNKNOWN);
635     bitmap1.ReadPixels(imageInfo, bitmap.GetPixels(), bitmap.GetRowBytes(), 50, 50); // (50, 50) is position
636 
637     // 4.组合transform函数
638     playbackCanvas_->Scale(1.0f, 10100.0f); // ratio
639 
640     // 5.设置视效效果,将效果添加到笔刷
641     std::vector<Drawing::ColorQuad> colors = { Drawing::Color::COLOR_RED, Drawing::Color::COLOR_GREEN,
642         Drawing::Color::COLOR_BLUE };
643     std::vector<Drawing::scalar> pos = { 0.00f, 0.50f, 1.00f };
644     auto linearGradient =
645         Drawing::ShaderEffect::CreateLinearGradient({ 0, 0 }, { 1000, 1000 }, colors, pos, Drawing::TileMode::CLAMP);
646     brush.SetShaderEffect(linearGradient);
647 
648     // 6.绘制结果
649     playbackCanvas_->AttachBrush(brush);
650     playbackCanvas_->DrawBitmap(bitmap, 200, 200);  // 200,200 is bitmap position
651     playbackCanvas_->DrawBitmap(bitmap1, 250, 300); // 250,300 is bitmap position
652     playbackCanvas_->DetachBrush();
653 
654     // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致
655     auto rect = Drawing::Rect(250, 300, 400, 500);       // rect region (250, 300, 400, 500)
656     auto rrect = Drawing::RoundRect(rect, 50.0f, 50.0f); // 50.0f is angle
657     playbackCanvas_->Save();
658     playbackCanvas_->ClipRoundRect(rrect, Drawing::ClipOp::DIFFERENCE, false);
659     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
660     playbackCanvas_->Restore();
661 }
662 
663 // Bitmap_Scene_0942
664 // Bitmap构造接口:Bitmap_TryAllocPixels_L1_54
665 // Bitmap操作接口:CopyPixels
666 // cilp:ClipRoundRect(非G2)
667 // transform:Scale(极小值)
668 // 抗锯齿:AA
669 // 透明度:半透明
670 // 视效:CreateColorShader
671 DEF_DTK(Bitmap_Scene94, TestLevel::L2, 12)
672 {
673     /*
674      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
675      */
676     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
677     using namespace Drawing;
678     Drawing::Brush brush;
679     brush.SetAntiAlias(true); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
680 
681     // 2.创建Bitmap
682     auto colorspace = Drawing::ColorSpace::CreateSRGB();
683     auto imageInfo = ImageInfo(511, 844, COLORTYPE_RGB_888X, ALPHATYPE_UNPREMUL, colorspace); // 511 width & 844 height
684     Drawing::Bitmap bitmap;
685     bitmap.TryAllocPixels(imageInfo);
686     bitmap.ClearWithColor(0xFF789645); // 灰绿色
687 
688     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
689     Drawing::Bitmap bitmap1;
690     bitmap1.TryAllocPixels(imageInfo);
691     bitmap1.ClearWithColor(0x894567FA); // 半透明效果,粉蓝色
692     bitmap1.CopyPixels(bitmap, 50, 50); // 50 width & Height
693 
694     // 4.组合transform函数
695     playbackCanvas_->Scale(10100.0f, 1.0f); // ratio
696 
697     // 5.设置视效效果,将效果添加到笔刷
698     brush.SetColor(0xFFFF0000);
699     auto colorShader = Drawing::ShaderEffect::CreateColorShader(Drawing::Color::COLOR_RED);
700     brush.SetShaderEffect(colorShader);
701 
702     // 6.绘制结果
703     playbackCanvas_->AttachBrush(brush);
704     playbackCanvas_->DrawBitmap(bitmap, 200, 200);  // 200,200 is bitmap position
705     playbackCanvas_->DrawBitmap(bitmap1, 250, 300); // 250,300 is bitmap position
706     playbackCanvas_->DetachBrush();
707 
708     // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致
709     auto rect = Drawing::Rect(300, 300, 400, 400);       // rect region (300, 300, 400, 400)
710     auto rrect = Drawing::RoundRect(rect, 30.0f, 30.0f); // 30.0f is angle
711     playbackCanvas_->Save();
712     playbackCanvas_->ClipRoundRect(rrect, Drawing::ClipOp::DIFFERENCE, true);
713     playbackCanvas_->Clear(Drawing::Color::COLOR_RED);
714     playbackCanvas_->Restore();
715 }
716 
717 // Bitmap_Scene_0943
718 // Bitmap构造接口:Bitmap_TryAllocPixels_L1_54
719 // Bitmap操作接口:InstallPixels
720 // cilp:null
721 // transform:Translate
722 // 抗锯齿:非AA
723 // 透明度:不透明
724 // 视效:CreateBlurImageFilter
725 DEF_DTK(Bitmap_Scene94, TestLevel::L2, 13)
726 {
727     /*
728      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
729      */
730     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
731     using namespace Drawing;
732     Drawing::Brush brush;
733     brush.SetAntiAlias(false); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
734 
735     // 2.创建Bitmap
736     auto colorspace = Drawing::ColorSpace::CreateSRGB();
737     auto imageInfo = ImageInfo(511, 844, COLORTYPE_RGB_888X, ALPHATYPE_UNPREMUL, colorspace); // 511 width & 844 height
738     Drawing::Bitmap bitmap;
739     bitmap.TryAllocPixels(imageInfo);
740     bitmap.ClearWithColor(0xFF789645); // 灰绿色
741 
742     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
743     Drawing::Bitmap bitmap1;
744     bitmap1.TryAllocPixels(imageInfo);
745     bitmap1.ClearWithColor(0xFF4567FA); // 不透明效果,粉蓝色
746     auto imageInfo1 = Drawing::ImageInfo(
747         500, 500, Drawing::ColorType::COLORTYPE_UNKNOWN, Drawing::ALPHATYPE_UNKNOWN); // 500 width & 500 height
748     uint32_t pixels[][5] = { { 0xBFA12345, 0xCB9745D2, 0xD0ACB2F4, 0xD34A1234, 0xCDE7AB9F },
749         { 0xD98289C1, 0xC56A2F1A, 0xF3A807CC, 0xBD31C9A2, 0xF05A5378 },
750         { 0xCF19A7E4, 0xF29074BD, 0xC0C35F1A, 0xE73812A7, 0xD98E2B43 },
751         { 0xB6F10D34, 0xD98289C1, 0xC9A4527A, 0xC03D15A2, 0xF4B2C380 },
752         { 0xBF1D68A3, 0xE5A3D1C4, 0xCBF722ED, 0xD7A9BC64, 0xB4C5F219 } };
753     if (bitmap1.InstallPixels(imageInfo, pixels, bitmap.GetRowBytes())) {
754         Drawing::Image image;
755         image.BuildFromBitmap(bitmap1);
756 
757         // 4.组合transform函数
758         playbackCanvas_->Translate(200, 200); // 200 distance
759 
760         // 5.设置视效效果,将效果添加到笔刷
761         brush.SetColor(0xFFFF0000);
762         auto filter = Drawing::Filter();
763         filter.SetImageFilter(Drawing::ImageFilter::CreateBlurImageFilter(
764             10.0f, 10.0f, Drawing::TileMode::CLAMP, nullptr, Drawing::ImageBlurType::GAUSS));
765         brush.SetFilter(filter);
766 
767         // 6.绘制结果
768         playbackCanvas_->AttachBrush(brush);
769         playbackCanvas_->DrawBitmap(bitmap, 200, 200);                  // 200,200 is bitmap position
770         playbackCanvas_->DrawImage(image, 250, 300, SamplingOptions()); // 250,300 is bitmap position
771         playbackCanvas_->DetachBrush();
772     }
773 }
774 
775 // Bitmap_Scene_0944
776 // Bitmap构造接口:Bitmap_TryAllocPixels_L1_54
777 // Bitmap操作接口:Serialize/Deserialize
778 // cilp:ClipPath
779 // transform:Shear
780 // 抗锯齿:AA
781 // 透明度:透明
782 // 视效:CreateBlendModeColorFilter
783 DEF_DTK(Bitmap_Scene94, TestLevel::L2, 14)
784 {
785     /*
786      *绘制流程说明:默认绘制两个Bitmap,即2、3两步,透明度效果只在第3步设置
787      */
788     // 1.创建笔刷,设置笔刷是否为抗锯齿效果
789     using namespace Drawing;
790     Drawing::Brush brush;
791     brush.SetAntiAlias(true); // 设置笔刷抗锯齿,true为AA(抗锯齿),false为非AA(不抗锯齿)
792 
793     // 2.创建Bitmap
794     auto colorspace = Drawing::ColorSpace::CreateSRGB();
795     auto imageInfo = ImageInfo(511, 844, COLORTYPE_RGB_888X, ALPHATYPE_UNPREMUL, colorspace); // 511 width & 844 height
796     Drawing::Bitmap bitmap;
797     bitmap.TryAllocPixels(imageInfo);
798     bitmap.ClearWithColor(0xFF789645); // 灰绿色
799 
800     // 3.组合Bitmap操作函数,设置透明度, 由最后一步填充的颜色值的前两位控制,00为透明效果,89为半透明,FF为不透明
801     Drawing::Bitmap bitmap1;
802     bitmap1.TryAllocPixels(imageInfo);
803     bitmap1.ClearWithColor(0x004567FA); // 透明效果,粉蓝色
804     auto data = bitmap1.Serialize();
805     if (bitmap1.Deserialize(data)) {
806         playbackCanvas_->DrawBackground(0xFF675800); // 深棕榈
807     }
808 
809     // 4.组合transform函数
810     playbackCanvas_->Shear(10.0f, 10.0f); // slope
811 
812     // 5.设置视效效果,将效果添加到笔刷
813     brush.SetColor(0xFFFF0000);
814 
815     for (auto blendMode : blendModes) {
816         std::shared_ptr<Drawing::ColorFilter> colorFilter =
817             Drawing::ColorFilter::CreateBlendModeColorFilter(0xFFFF0000, blendMode);
818         auto filter = Drawing::Filter();
819         filter.SetColorFilter(colorFilter);
820         brush.SetFilter(filter);
821 
822         // 6.绘制结果
823         playbackCanvas_->AttachBrush(brush);
824         playbackCanvas_->DrawBitmap(bitmap, 200, 200);  // 200,200 is bitmap position
825         playbackCanvas_->DrawBitmap(bitmap1, 250, 300); // 250,300 is bitmap position
826     }
827     playbackCanvas_->DetachBrush();
828 
829     // 7.组合Clip函数,cilp也有抗锯齿效果,默认和笔刷效果保持一致
830     Drawing::Path path;
831     path.AddRect({ 200, 300, 700, 800 }); // rect region (200, 300, 700, 800)
832     path.SetFillStyle(Drawing::PathFillType::INVERSE_WINDING);
833     playbackCanvas_->Save();
834     playbackCanvas_->ClipPath(path, Drawing::ClipOp::DIFFERENCE, true);
835     playbackCanvas_->Clear(Drawing::Color::COLOR_GREEN);
836     playbackCanvas_->Restore();
837 }
838 
839 } // namespace Rosen
840 } // namespace OHOS
841