[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/skia-python/skia-python/main/src/skia/utils.cpp [Back]  [Original]

#include "common.h"
#include 
#include 


template 
sk_sp CloneFlattenable(const SkShader& shader) {
    auto data = shader.serialize();
    auto flat = SkShader::Deserialize(
        shader.getFlattenableType(), data->data(), data->size());
    return sk_sp(reinterpret_cast(flat.release()));
}

template 
sk_sp CloneFlattenable(const SkColorFilter& colorFilter) {
    auto data = colorFilter.serialize();
    auto flat = colorFilter.Deserialize(data->data(), data->size());
    return sk_sp(
        reinterpret_cast(flat.release()));
}

sk_sp CloneColorSpace(const SkColorSpace* cs) {
    return (cs) ? CloneFlattenable(*cs) : sk_sp(nullptr);
}


sk_sp CloneImage(const SkImage& image) {
    SkPixmap pixmap;
    if (image.peekPixels(&pixmap))
        return SkImages::RasterFromPixmapCopy(pixmap);
    return SkImages::DeferredFromEncodedData(SkPngEncoder::Encode(nullptr, &image, {}));
}

size_t ValidateBufferToImageInfo(
    const SkImageInfo& imageInfo,
    const py::buffer_info& buffer,
    size_t rowBytes) {
    if (buffer.ndim == 0)
        throw py::value_error("Buffer does not have dimensions.");
    if (buffer.ndim == 1 && rowBytes == 0)
        rowBytes = imageInfo.minRowBytes();
    else if (buffer.ndim > 1)
        rowBytes = buffer.strides[0];

    if (!imageInfo.validRowBytes(rowBytes))
        throw py::value_error(py::str(
            "Row bytes is smaller than required (expected {}, given {})"
            ).format(imageInfo.minRowBytes(), rowBytes));

    size_t byteSize = buffer.strides[0] * buffer.shape[0];
    if (byteSize < imageInfo.computeByteSize(rowBytes))
        throw py::value_error(py::str(
            "Byte size is smaller than required (expected {}, given {})"
            ).format(imageInfo.computeByteSize(rowBytes), byteSize));
    return rowBytes;
}

SkImageInfo NumPyToImageInfo(py::array array, SkColorType ct, SkAlphaType at,
                             const SkColorSpace* cs) {
    if (!(array.flags() & py::array::c_style))
        throw py::value_error("Array must be C-style contiguous.");
    if (array.ndim() 

Web Proxy Viewer  |  New URL  |  Original Page