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