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