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