c++ - 支持多种像素格式

标签 c++ image-processing image-manipulation

我需要编写一些代码来处理多种像素格式(例如 A8R8G8B8、R8G8B8、R5G6B6,甚至可能是浮点格式)。

理想情况下,我不想为每种格式编写每个函数,因为这是大量几乎相同的代码。

我唯一能想到的是某种接口(interface)让它处理像素格式转换,例如:

class IBitmap
{
public:
    virtual unsigned getPixel(unsigned x, unsigned y)const=0;
    virtual void setPixel(unsigned x, unsigned y, unsigned argb)=0;
    virtual unsigned getWidth()const=0;
    virtual unsigned getHeight()const=0;
};

然而,为每个获取或设置像素操作调用虚函数并不快,因为不仅存在虚调用的额外开销,而且更重要的是,它还阻止了对只有几条指令长的内容进行内联。

是否有任何其他选项可以让我有效地支持所有这些格式?一般来说,我的代码可能只对位图的一小部分进行操作,并且在许多情况下需要读/写访问权限(混合)。

最佳答案

考虑使用模板。这将允许您在可能的情况下进行通用编写,并在编译时对代码进行专门化处理

有时称为静态多态性。 http://en.wikipedia.org/wiki/Curiously_Recurring_Template_Pattern

关于c++ - 支持多种像素格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3676850/

相关文章:

c++ - 有没有办法检查 istream 是否以二进制模式打开?

c++ - 使用 QtGStreamer 检索视频大小返回零

c++ - 如何从非托管 C++ 调用托管 C++ 方法

php - 使用 ImageMagick 创建类似 placeit.net 的模型?

c++ - 使用 GraphicsMagick 调整动画 GIF 的大小

c++ - wxSmith 管理wxPanel的好方法

image - OpenCV 图像表示中的值的含义是什么?

java - 更改 java.awt.Image 中的颜色?

python - 使用 PIL 自动裁剪图像

image - OpenCV imwrite 给出了 jpeg 图像的褪色结果