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