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