gpt4 book ai didi

asp.net-core - 如何使用 SkiaSharp 查找解码位图的 PixelFormat

转载 作者:行者123 更新时间:2023-12-02 01:00:21 27 4
gpt4 key购买 nike

在System.Drawing中,我们从Image对象中检索PixelFormat,但SkiaSharp.SkImage不提供API来查找解码图像的PixelFormat。是否有任何其他解决方法来查找解码图像的 PixelFormat 以及我们如何创建具有 PixelFormat 值相当于 System.Drawing.Image 的图像

最佳答案

简短回答

有这个方面,但它分为两种类型:SKColorTypeSKAlphaType。这些属性可在 SKImageInfo 类型中找到。

SKImageSKBitmap

在分享真正的答案之前,先简要介绍一下两种图像类型之间的差异。

SKBitmap (仅限光栅)

SKBitmap纯光栅图形,这意味着颜色和 Alpha 类型信息随时可用。这是在 Info属性(property)。

SKBitmap bitmap = ...;
SKColorType colorType = bitmap.Info.ColorType;
SKAlphaType alphaType = bitmap.Info.AlphaType;

SKImage (光栅或纹理)

SKImage 有点不同,因为它实际上可能不是光栅位图。 SKImage 可以是 GPU 对象,例如 OpenGL 纹理。因此,此颜色类型不适用。因此,在使用光栅位图的情况下,请使用 SKBitmap 而不是 SKImage

但是,SKImage 仍然有希望,因为基于光栅的 SKImage 实际上在底层使用了 SKBitmap。如果您知道 SKImage 是光栅图像,则可以使用 PeekPixels() 方法获取 SKPixmap对象也将具有 Info 属性。 SKPixmap 是一种精简类型,包含对图像数据、信息和一些其他属性的引用。

要检查某个 SKImage 是纹理图像还是光栅图像,可以使用 IsTextureBacked 属性。

SKImage image = ...;
if (!image.IsTextureBacked) {
using (SKPixmap pixmap = image.PeekPixels()) {
SKColorType colorType = pixmap.ColorType;
SKAlphaType alphaType = pixmap.AlphaType;
}
} else {
// this is a texture on the GPU and can't be determined easily
}

更长的答案

所以现在更长的答案...... SKColorTypeSKAlphaType 类型一起形成了 PixelFormat 的等效项。

例如:

Rgba8888Bgra8888 之间的主要区别在于应用程序运行的平台。通常,您会根据 SKImageInfo.PlatformColorType 检查颜色类型。因为这将知道 native 颜色类型应该是什么。

关于asp.net-core - 如何使用 SkiaSharp 查找解码位图的 PixelFormat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47976927/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com