2021SC@SDUSC
目录
一、Image C++ wrapper分析
1.Handler类
class Handler {
public:
virtual ~Handler() { }
/// invoked by library when Image should be processed
virtual void image_callback(Image &image) = 0;
/// cast this handler to the C handler
operator zbar_image_data_handler_t* () const
{
return(_cb);
}
Handler类是通用图像结果处理程序。应用程序应该对此进行子类型化,并将实例传递给子类以实现结果处理,例如:ImageScanner::set_handler()。
2.SymbolIterator类
class SymbolIterator : public zbar::SymbolIterator {
public:
/// default constructor.
SymbolIterator ()
: zbar::SymbolIterator()
{ }
/// constructor.
SymbolIterator (const SymbolSet &syms)
: zbar::SymbolIterator(syms)
{ }
/// copy constructor.
SymbolIterator (const SymbolIterator& iter)
: zbar::SymbolIterator(iter)
{ }
};
SymbolIterator类是迭代器类,用于遍历图像信息。
SymbolIterator symbol_begin () const {
return(SymbolIterator(get_symbols()));
}
SymbolIterator symbol_end () const {
return(SymbolIterator());
}
分别返回适合开始迭代和适合结束迭代的symbolicator。
3.Image类构造函数
Image (unsigned width = 0,
unsigned height = 0,
const std::string& format = "",
const void *data = NULL,
unsigned long length = 0)
: _img(zbar_image_create())
{
zbar_image_set_userdata(_img, this);
if(width && height)
set_size(width, height);
if(format.length())
set_format(format);
if(data && length)
set_data(data, length);
}
使用指定的参数(图像的高、宽、格式、数据)创建新图像,zbar需要的是单Y通道的图像,可以使用后面的格式转化函数,也可以用OpenCV转化为单Y通道的图像。
4.Image类convert函数
Image convert (unsigned long format) const
{
zbar_image_t *img = zbar_image_convert(_img, format);
if(img)
return(Image(img));
throw FormatError();
}
/// image format conversion.
/// see zbar_image_convert()
/// @since 0.11
Image convert (std::string format) const
{
unsigned long fourcc = zbar_fourcc_parse(format.c_str());
return(convert(fourcc));
}
/// image format conversion with crop/pad.
/// see zbar_image_convert_resize()
/// @since 0.4
Image convert (unsigned long format,
unsigned width,
unsigned height) const
{
zbar_image_t *img =
zbar_image_convert_resize(_img, format, width, height);
if(img)
return(Image(img));
throw FormatError();
}
图像的格式转化,转化图像为format规定的格式,返回格式化后的图像。
二、zbar图像格式分析
在之前的代码分析中,已经分析过许多关于zbar图像格式处理的函数,在这里对zbar的图像格式做一个总结分析。
zbar的图像格式以fourcc图像格式代码形式存储。fourcc是“Four character code”的缩写,也称为4CC。该编码用于指示一个视频的编码压缩格式等信息。一个字符通常占用一个字节也就是8位的存储空间,那么四字码通常占用32位的大小。四个字符通常都是用ASCII字符编码,以方便交流。
构建zbar需要的单Y通道(Y8 or Y800)的图像,Y800=GREY 实际上都是GRAY灰度图像。同时,Image支持常见的YUV以及RGB图像。