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