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