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