【发布时间】:2023-03-12 18:53:02
【问题描述】:
我有一些各种简单格式的内存图像,我需要快速转换成另一种格式。如果目标格式包含 alpha 通道但源不包含,则 alpha 应作为其完整值(例如 8 位目标 alpha 通道为 0xFF)。
我需要能够处理各种格式,例如A8R8G8B8、R8G8B8A8、A1R4G4B4、R5G6B5等。
这些格式之间的像素转换很简单,但是我不想手动编码每个组合,我也不想有一个转换为通用格式的 2 遍解决方案(例如 A8R8G8B8 ) 在出于性能原因再次转换为最终格式之前,如果我想使用更高清晰度的格式,比如 A16B16G16R16 或浮点数,我要么丢失一些转换为中间格式的数据,要么必须将所有内容重写为使用不同的更高清晰度格式...
理想情况下,id 像某种枚举,每个格式都有值,然后是一个单一的方法来转换,例如说
enum ImageFormat
{
FMT_A8R8G8B8,//32bit
FMT_A1R4G4B4,//16bit
FMT_R5G6B5,//16bit
FMT_A32R32G32B32F,//128bit floating point format
...
};
struct Image
{
ImageFormat Format;
size_t Width, Height;
size_t Pitch;
void *Data;
};
Image *ConvertImage(ImageFormat *targetFormat, const Image *sourceImage);
【问题讨论】:
标签: c++ image-processing