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