blob: 3b0a61b87e37af83f72f3e0b64a422e229a217a2 [file]
/*
* 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);
}
}
}