| /* | |
| * Copyright 2026 Google LLC | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #include "include/core/SkAlphaType.h" | |
| #include "include/core/SkCanvas.h" | |
| #include "include/core/SkColor.h" | |
| #include "include/core/SkColorType.h" | |
| #include "include/core/SkImageInfo.h" | |
| #include "include/core/SkSize.h" | |
| #include "include/core/SkSurface.h" | |
| #include "src/core/SkAutoPixmapStorage.h" | |
| #include "src/core/SkConvertPixels.h" | |
| #include "tests/Test.h" | |
| DEF_TEST(ConvertPixels_in_place, r) { | |
| static constexpr SkISize kTestSize = { 256, 256 }; | |
| static constexpr SkColorType gTestCTs[] = { | |
| kAlpha_8_SkColorType, | |
| kRGB_565_SkColorType, | |
| kARGB_4444_SkColorType, | |
| kRGBA_8888_SkColorType, | |
| kBGRA_8888_SkColorType, | |
| kRGBA_1010102_SkColorType, | |
| kBGRA_1010102_SkColorType, | |
| kGray_8_SkColorType, | |
| kRGBA_F16Norm_SkColorType, | |
| kRGBA_F16_SkColorType, | |
| kRGBA_F32_SkColorType, | |
| }; | |
| auto surface = SkSurfaces::Raster(SkImageInfo::MakeN32Premul(kTestSize)); | |
| surface->getCanvas()->drawColor(SK_ColorGREEN); | |
| auto image = surface->makeImageSnapshot(); | |
| for (const auto& srcCT :gTestCTs) { | |
| const auto srcInfo = SkImageInfo::Make(kTestSize, srcCT, kPremul_SkAlphaType); | |
| SkAutoPixmapStorage pm; | |
| pm.alloc(srcInfo); | |
| REPORTER_ASSERT(r, image->readPixels(nullptr, pm, 0, 0)); | |
| for (const auto& dstCT : gTestCTs) { | |
| const auto dstInfo = SkImageInfo::Make(kTestSize, dstCT, kPremul_SkAlphaType); | |
| // Expected to succeed iff bpp matches. | |
| const bool should_succeed = srcInfo.bytesPerPixel() == dstInfo.bytesPerPixel(); | |
| REPORTER_ASSERT(r, SkConvertPixels(dstInfo, pm.writable_addr(), dstInfo.minRowBytes(), | |
| srcInfo, pm.addr() , srcInfo.minRowBytes()) | |
| == should_succeed); | |
| } | |
| } | |
| } |