GrFmtReader的类结构----OpenCV源码阅读之六

下面给出GrFmtReader的结构图:

 

 
那么这里再看一下GrFmtReader的类结构:

/ base class for readers
class GrFmtReader
{
public:

GrFmtReader( const char* filename );
virtual ~GrFmtReader();

int GetWidth() { return m_width; };
int GetHeight() { return m_height; };
bool IsColor() { return m_iscolor; };
int GetDepth() { return m_bit_depth; };
void UseNativeDepth( bool yes ) { m_native_depth = yes; }; //设置否用本地的通道数。
bool IsFloat() { return m_isfloat; };

virtual bool ReadHeader() = 0;
virtual bool ReadData( uchar* data, int step, int color ) = 0;
virtual void Close();

protected:

bool m_iscolor;
int m_width; // 图像的宽度,被ReadHeader()设置。
int m_height; // 图像的高度,被ReadHeader()设置。
int m_bit_depth;// 每一个通道中的位数,一般而言是8位,很明显,也有不是的。
char m_filename[_MAX_PATH]; // 要读取的文件名及位置。注意最长长度。为什么不用string?
bool m_native_depth;//用图片本身的通道数
bool m_isfloat; //这个图片是用float or double?
};



这个类的其他函数都没有做什么,只是设置了一些数据:代码如下:这里不再具体进行设计:

view plaincopy to clipboardprint?
GrFmtReader::GrFmtReader( const char* filename )
{
strncpy( m_filename, filename, sizeof(m_filename) - 1 );
m_filename[sizeof(m_filename)-1] = '/0';
m_width = m_height = 0;
m_iscolor = false;
m_bit_depth = 8;
m_native_depth = false;
m_isfloat = false;
}


GrFmtReader::~GrFmtReader()
{
Close();
}


void GrFmtReader::Close()
{
m_width = m_height = 0;
m_iscolor = false;
}

实际应该可以看出,这个函数本身只放了一些存取数据的函数在这里,本身最关键的函数是没有放在这里。应该是与具体的读哪个图片是有关系的。那么当我们读BMP图片的时候,用的就是GrFmtBmpReader这个读取器。接下来看一下这个读取器。

GrFmtReader的类结构----OpenCV源码阅读之六 - 糖糖飞鱼 - 复原大师修炼ING...

 
再看一下这个类的内部构造。

view plaincopy to clipboardprint?
class GrFmtBmpReader : public GrFmtReader
{
public:

GrFmtBmpReader( const char* filename );
~GrFmtBmpReader();

bool ReadData( uchar* data, int step, int color ); //取读数据。
bool ReadHeader();//读取文件头。
void Close();

protected:

RLByteStream m_strm;//流读取器。
PaletteEntry m_palette[256];//调色板
int m_bpp;//?
int m_offset;//?
BmpCompression m_rle_code;//压缩编码
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值