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