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