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