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