我需要编写一些代码,这些代码可以处理多种像素格式(例如A8R8G8B8,R8G8B8,R5G6B6,甚至可能是浮点格式)。支持多种像素格式
理想情况下,我想不必为每种格式编写每个函数,因为这是大量近乎相同的代码。
我能想到的唯一的事情是某种接口让它处理像素格式转换,例如:
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;
};
但是呼吁虚函数每次获取或设置像素的操作是很难快,因为不只有虚拟调用的额外开销,但是更重要的是防止内联仅仅是几条指令的内容。
是否有任何其他选项可以让我有效地支持所有这些格式?一般来说,我的代码可能只能在小部分位图上运行,并且在很多情况下(混合)需要读/写访问权限。
设置像素的工作量很小,调用虚拟函数(甚至普通函数)的开销与函数本身的工作量大致相同或更大。特别是如果您拨打50万次SetPixel来覆盖表面,则可能会浪费一半或更多的时间来处理函数调用。是的,虚拟功能很快,但不适用于setpixel功能。 – AshleysBrain 2010-09-09 13:37:11