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