ZBar源码分析(六)

2021SC@SDUSC

目录

一、Image C++ wrapper分析

1.Handler类

2.SymbolIterator类

3.Image类构造函数

4.Image类convert函数

二、zbar图像格式分析


一、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字符编码,以方便交流。

具体参考:FOURCC四字符码列表_三人行-CSDN博客

构建zbar需要的单Y通道(Y8 or Y800)的图像,Y800=GREY 实际上都是GRAY灰度图像。同时,Image支持常见的YUV以及RGB图像。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值