当前位置: 首页 > 工具软件 > ZBar > 使用案例 >

ZBar源码分析(九)

姚昊焱
2023-12-01

2021SC@SDUSC

目录

一、条形码阅读器Qt4 Widget分析

二、QImage到Image类型转换wrapper分析


一、条形码阅读器Qt4 Widget分析

条形码读取器直接嵌入基于Qt4的GUI。

该小部件可以处理来自视频源或提供给QZBar::scanImage()插槽的单个QImages的条形码。

Q_PROPERTY(QString videoDevice
               READ videoDevice
               WRITE setVideoDevice
               DESIGNABLE false)

设置新设备将打开它并自动设置。

Q_PROPERTY(bool videoEnabled
               READ isVideoEnabled
               WRITE setVideoEnabled
               DESIGNABLE false)

用于暂停/恢复视频扫描。

Q_PROPERTY(bool videoOpened
               READ isVideoOpened
               DESIGNABLE false)

(重新)设置QZBar::videoDevice最终应导致其打开或关闭。流式传输/扫描过程中的任何错误也将导致设备关闭。

QZBar(QWidget *parent = NULL);

~QZBar();

QString videoDevice() const;

bool isVideoEnabled() const;

bool isVideoOpened() const;

QSize sizeHint() const;
int heightForWidth(int) const;
QPaintEngine *paintEngine() const;

分别检索当前打开的视频设备、视频启用状态、视频打开状态。

返回当前视频设备,如果没有打开设备,则返回空字符串。

如果当前启用了视频扫描,则返回true,否则返回false。

如果当前打开了视频设备,则返回true,否则返回false。

void setVideoDevice(const QString &videoDevice);

void setVideoEnabled(bool videoEnabled = true);

void scanImage(const QImage &image);

打开一个新的视频设备,由于打开设备可能需要一些时间,此调用将立即返回,并且设备将异步打开。

二、QImage到Image类型转换wrapper分析

QZBarImage (const QImage &qimg)
        : qimg(qimg)
    {
        QImage::Format fmt = qimg.format();
        if(fmt != QImage::Format_RGB32 &&
           fmt != QImage::Format_ARGB32 &&
           fmt != QImage::Format_ARGB32_Premultiplied)
            throw FormatError();

        unsigned bpl = qimg.bytesPerLine();
        unsigned width = bpl / 4;
        unsigned height = qimg.height();
        set_size(width, height);
        set_format(zbar_fourcc('B','G','R','4'));
        unsigned long datalen = qimg.numBytes();
        set_data(qimg.bits(), datalen);

        if((width * 4 != bpl) ||
           (width * height * 4 > datalen))
            throw FormatError();

基于现有QImage构建zbar库映像。

 类似资料: