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