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