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