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