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