| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 430 人关注过本帖
标题:zxing4vfp条码识别库
只看楼主 加入收藏
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:1150
专家分:1680
注 册:2021-10-13
收藏
 问题点数:0 回复次数:7 
zxing4vfp条码识别库
@easyppt zxing4vfp库已经制作完成,效果图如下:
图片附件: 游客没有浏览图片的权限,请 登录注册

代码如下:
程序代码:
* 读取图片,返回句柄
DECLARE INTEGER _ZXingReadImage@8 IN ZXing4Vfp.dll AS ZXingReadImage STRING, INTEGER

* 获取条码数量
DECLARE INTEGER _ZXingGetBarcodeCount@4 IN ZXing4Vfp.dll AS ZXingGetBarcodeCount INTEGER

* 获取条码文本
DECLARE INTEGER _ZXingGetBarcodeText@20 IN ZXing4Vfp.dll AS ZXingGetBarcodeText INTEGER, STRING @, INTEGER, INTEGER, INTEGER

* 获取条码格式枚举值
DECLARE INTEGER _ZXingGetBarcodeFormat@8 IN ZXing4Vfp.dll AS ZXingGetBarcodeFormat INTEGER, INTEGER

* 获取条码格式名称
DECLARE INTEGER _ZXingGetBarcodeFormatName@16 IN ZXing4Vfp.dll AS ZXingGetBarcodeFormatName INTEGER, STRING @, INTEGER, INTEGER

* 获取定位点数量
DECLARE INTEGER _ZXingGetBarcodeResultPointCount@8 IN ZXing4Vfp.dll AS ZXingGetBarcodeResultPointCount INTEGER, INTEGER

* 获取定位点坐标
DECLARE INTEGER _ZXingGetBarcodeResultPoint@20 IN ZXing4Vfp.dll AS ZXingGetBarcodeResultPoint INTEGER, INTEGER, INTEGER, single @, single @

* 释放句柄
DECLARE INTEGER _ZXingReleaseBarcode@4 IN ZXing4Vfp.dll AS ZXingReleaseBarcode INTEGER

* 错误信息相关(虽然你的实现未完整,但可以声明)
DECLARE INTEGER _ZXingErrorCode@4 IN ZXing4Vfp.dll AS ZXingErrorCode INTEGER
DECLARE INTEGER _ZXingErrorClass@12 IN ZXing4Vfp.dll AS ZXingErrorClass INTEGER, STRING @, INTEGER
DECLARE INTEGER _ZXingErrorMessage@12 IN ZXing4Vfp.dll AS ZXingErrorMessage INTEGER, STRING @, INTEGER

* 测试 ZXing4Vfp.dll 解码功能
LOCAL lcFile, lcUtf8Path, lnHandle, lnCount, lcBuffer, lcText, lcFormatName, lnPointCnt, i, fx, fy

* 选择图片文件
lcFile = GETFILE("png;jpg;jpeg;bmp", "选择条码图片", "打开")
IF EMPTY(lcFile)
    RETURN
ENDIF

* 转换路径为 UTF-8
lcUtf8Path = STRCONV(lcFile, 9)

* 解码
lnHandle = ZXingReadImage(lcUtf8Path, 0)
IF lnHandle <= 0
    MESSAGEBOX("解码失败,无法识别条码")
    RETURN
ENDIF

* 获取条码数量
lnCount = ZXingGetBarcodeCount(lnHandle)
? "找到条码数量:", lnCount

IF lnCount > 0
    * 读取第一个条码的文本
    lcBuffer = SPACE(512)
    lnLen = ZXingGetBarcodeText(lnHandle, @lcBuffer, 512, 0, 0)
    lcText = LEFT(lcBuffer, lnLen)
    ? "条码内容:", lcText

    * 读取格式名称
    lcBuffer = SPACE(64)
    lnLen = ZXingGetBarcodeFormatName(lnHandle, @lcBuffer, 64, 0)
    lcFormatName = LEFT(lcBuffer, lnLen)
    ? "条码格式:", lcFormatName

    * 读取定位点
    lnPointCnt = ZXingGetBarcodeResultPointCount(lnHandle, 0)
    ? "定位点数量:", lnPointCnt
    FOR i = 0 TO lnPointCnt - 1
        fx = 0
        fy = 0
        IF ZXingGetBarcodeResultPoint(lnHandle, 0, i, @fx, @fy) = 1
            ? "点", i+1, "坐标:", fx, fy
        ENDIF
    ENDFOR
ENDIF

* 释放资源
ZXingReleaseBarcode(lnHandle)

MESSAGEBOX("解码完成", 64, "提示")

SDK说明档
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册


有偿共享,50元/份。
搜索更多相关主题的帖子: dll 获取 STRING INTEGER 条码 
2026-05-01 02:06
schtg
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:USA
等 级:贵宾
威 望:67
帖 子:2581
专家分:4954
注 册:2012-2-29
收藏
得分:0 
2026-05-01 06:00
jaime47
Rank: 1
等 级:新手上路
帖 子:7
专家分:7
注 册:2018-5-14
收藏
得分:0 
请问一下,如何付款?
2026-05-06 13:58
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:1150
专家分:1680
注 册:2021-10-13
收藏
得分:0 
回复 3楼 jaime47
发私信加我
2026-05-06 19:59
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:1150
专家分:1680
注 册:2021-10-13
收藏
得分:0 
多条码识别:
参考图:
图片附件: 游客没有浏览图片的权限,请 登录注册


识别效果图:
图片附件: 游客没有浏览图片的权限,请 登录注册
2026-05-06 20:24
sych
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:496
专家分:748
注 册:2019-10-11
收藏
得分:0 
非常实用,功能不错
2026-05-07 07:34
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:1150
专家分:1680
注 册:2021-10-13
收藏
得分:0 
添加条码生成功能。
需要调用新库zxingc.dll。
代码如下:
程序代码:
* [color=#808080]============================================[/color]
* ZXing 条码生成库 [color=#808080]- VFP 调用版本[/color]
* 适用于 zxingc.dll (ZXing[color=#808080]-C++ C API)[/color]
* [color=#808080]============================================[/color]

* [color=#808080]============================================[/color]
* [color=#800000]1. DLL 函数声明[/color]
* [color=#808080]============================================[/color]

* CreatorOptions 相关
DECLARE Integer ZXing_CreatorOptions_new IN zxingc.dll Integer nFormat
DECLARE ZXing_CreatorOptions_delete IN zxingc.dll Integer pOpts
DECLARE ZXing_CreatorOptions_setFormat IN zxingc.dll Integer pOpts, Integer nFormat
DECLARE ZXing_CreatorOptions_setOptions IN zxingc.dll Integer pOpts, String cOptions

* 生成条码
DECLARE Integer ZXing_CreateBarcodeFromText IN zxingc.dll ;
    String cData, Integer nSize, Integer pOpts

* WriterOptions 相关
DECLARE Integer ZXing_WriterOptions_new IN zxingc.dll
DECLARE ZXing_WriterOptions_delete IN zxingc.dll Integer pOpts
DECLARE ZXing_WriterOptions_setScale IN zxingc.dll Integer pOpts, Integer nScale
DECLARE ZXing_WriterOptions_setAddQuietZones IN zxingc.dll Integer pOpts, Integer nAdd
DECLARE ZXing_WriterOptions_setRotate IN zxingc.dll Integer pOpts, Integer nRotate

* 渲染图片
DECLARE Integer ZXing_WriteBarcodeToImage IN zxingc.dll ;
    Integer pBarcode, Integer pWriterOpts

* 获取图片信息
DECLARE Integer ZXing_Image_width IN zxingc.dll Integer pImage
DECLARE Integer ZXing_Image_height IN zxingc.dll Integer pImage
DECLARE Integer ZXing_Image_data IN zxingc.dll Integer pImage
DECLARE Integer ZXing_Image_format IN zxingc.dll Integer pImage

* 释放资源
DECLARE ZXing_Image_delete IN zxingc.dll Integer pImage
DECLARE ZXing_Barcode_delete IN zxingc.dll Integer pBarcode
DECLARE ZXing_free IN zxingc.dll Integer pPtr

* 辅助函数
DECLARE String ZXing_LastErrorMsg IN zxingc.dll
DECLARE String ZXing_Version IN zxingc.dll


* [color=#808080]============================================[/color]
* [color=#800000]2. 条码格式常量(基于 ZX_BCF_ID 计算)[/color]
* [color=#808080]============================================[/color]

* 零售类 (Retail)
#define ZX_FORMAT_EAN13         12625   && EAN-13
#define ZX_FORMAT_EAN8          14405   && EAN-8
#define ZX_FORMAT_UPCA          24929   && UPC-A
#define ZX_FORMAT_UPCE          25957   && UPC-E
#define ZX_FORMAT_DATABAR       8309    && GS1 DataBar
#define ZX_FORMAT_DATABAR_EXP   8309    && GS1 DataBar Expanded

* 工业类 (Industrial)
#define ZX_FORMAT_CODE39        8257    && Code 39
#define ZX_FORMAT_CODE93        8263    && Code 93
#define ZX_FORMAT_CODE128       8259    && Code 128
#define ZX_FORMAT_ITF           8265    && ITF
#define ZX_FORMAT_CODABAR       8294    && Codabar

* 二维码[color=#808080]/矩阵 (2D/Matrix)[/color]
#define ZX_FORMAT_QRCODE        8273    && QR Code
#define ZX_FORMAT_MICROQR       8561    && Micro QR Code
#define ZX_FORMAT_RMQR          8306    && rMQR Code
#define ZX_FORMAT_DATAMATRIX    8292    && Data Matrix
#define ZX_FORMAT_PDF417        8268    && PDF417
#define ZX_FORMAT_AZTEC         8314    && Aztec
#define ZX_FORMAT_MAXICODE      8277    && MaxiCode


 *运行测试

 CLEAR 

 TestAllFormats()

* [color=#808080]============================================[/color]
* [color=#800000]3. 保存灰度图为 BMP 文件(内部函数)[/color]
* [color=#808080]============================================[/color]

FUNCTION SaveGrayAsBMP(tcGrayData, tnWidth, tnHeight, tcFilePath)
    LOCAL lnFileHandle, lcHeader, lnRow, lcBGRRow, i, j
    LOCAL lnRowSize, lnBMPRowSize, lnFileSize
    LOCAL lcRGBData
    
    * 转换为24位RGB
    lcRGBData = ""
    FOR i = 1 TO tnWidth * tnHeight
        lcRGBData = lcRGBData + REPLICATE(SUBSTR(tcGrayData, i, 1), 3)
    ENDFOR
    
    * BMP行对齐
    lnRowSize = tnWidth * 3
    lnBMPRowSize = lnRowSize
    IF lnBMPRowSize % 4 != 0
        lnBMPRowSize = lnBMPRowSize + (4 - (lnBMPRowSize % 4))
    ENDIF
    
    lnFileSize = 54 + lnBMPRowSize * tnHeight
    
    * BMP文件头
    lcHeader = "BM" + BINTOC(lnFileSize, "4RS") + BINTOC(0, "4RS") + BINTOC(54, "4RS")
    lcHeader = lcHeader + BINTOC(40, "4RS") + BINTOC(tnWidth, "4RS") + BINTOC(tnHeight, "4RS")
    lcHeader = lcHeader + BINTOC(1, "2RS") + BINTOC(24, "2RS") + BINTOC(0, "4RS")
    lcHeader = lcHeader + BINTOC(0, "4RS") + BINTOC(0, "4RS") + BINTOC(0, "4RS") + BINTOC(0, "4RS") + BINTOC(0, "4RS")
    
    * 写入文件
    lnFileHandle = FCREATE(tcFilePath)
    IF lnFileHandle <= 0
        RETURN .F.
    ENDIF
    
    = FWRITE(lnFileHandle, lcHeader)
    
    * 写入像素数据(从底到顶,RGB转BGR)
    FOR lnRow = tnHeight - 1 TO 0 STEP -1
        lcBGRRow = ""
        FOR j = 1 TO tnWidth
            lcBGRRow = lcBGRRow + SUBSTR(lcRGBData, (lnRow * tnWidth + j) * 3 - 1, 1)  && B
            lcBGRRow = lcBGRRow + SUBSTR(lcRGBData, (lnRow * tnWidth + j) * 3 - 0, 1)  && G
            lcBGRRow = lcBGRRow + SUBSTR(lcRGBData, (lnRow * tnWidth + j) * 3 - 2, 1)  && R
        ENDFOR
        = FWRITE(lnFileHandle, lcBGRRow)
        
        IF lnBMPRowSize > lnRowSize
            = FWRITE(lnFileHandle, REPLICATE(CHR(0), lnBMPRowSize - lnRowSize))
        ENDIF
    ENDFOR
    
    = FCLOSE(lnFileHandle)
    RETURN .T.
ENDFUNC


* [color=#808080]============================================[/color]
* [color=#800000]4. 主函数:生成条码并保存为 BMP 文件(带留白控制)[/color]
* [color=#808080]============================================[/color]

FUNCTION CreateBarcode(tcContent, tnFormat, tnScale, tcOutputPath, tnMargin)
    LOCAL pCreator, pBarcode, pWriter, pImage
    LOCAL lnWidth, lnHeight, lnDataPtr, lnDataSize
    LOCAL lcPixelData, lResult
    
    * 参数检查
    IF EMPTY(tcContent) OR EMPTY(tcOutputPath)
        RETURN .F.
    ENDIF
    
    IF tnScale < 1
        tnScale = 3
    ENDIF
    
    * 留白边距(像素),默认 20
    IF EMPTY(tnMargin) OR tnMargin < 0
        tnMargin = 20
    ENDIF
    
    * 1. 创建 CreatorOptions 并设置格式
    pCreator = ZXing_CreatorOptions_new(tnFormat)
    IF pCreator = 0
        RETURN .F.
    ENDIF
    
    * 2. 生成条码对象
    pBarcode = ZXing_CreateBarcodeFromText(tcContent, LEN(tcContent), pCreator)
    IF pBarcode = 0
        ZXing_CreatorOptions_delete(pCreator)
        RETURN .F.
    ENDIF
    
    * 3. 创建 WriterOptions 并配置
    pWriter = ZXing_WriterOptions_new()
    IF pWriter = 0
        ZXing_Barcode_delete(pBarcode)
        ZXing_CreatorOptions_delete(pCreator)
        RETURN .F.
    ENDIF
    
    ZXing_WriterOptions_setScale(pWriter, tnScale)
    ZXing_WriterOptions_setAddQuietZones(pWriter, 1)  && 启用内部静区
    
    * 4. 渲染图片
    pImage = ZXing_WriteBarcodeToImage(pBarcode, pWriter)
    IF pImage = 0
        ZXing_WriterOptions_delete(pWriter)
        ZXing_Barcode_delete(pBarcode)
        ZXing_CreatorOptions_delete(pCreator)
        RETURN .F.
    ENDIF
    
    * 5. 获取图片数据(灰度格式)
    lnWidth = ZXing_Image_width(pImage)
    lnHeight = ZXing_Image_height(pImage)
    lnDataPtr = ZXing_Image_data(pImage)
    lnDataSize = lnWidth * lnHeight
    lcPixelData = SYS(2600, lnDataPtr, lnDataSize)
    
    * 6. 添加留白(手动扩展画布)
    IF tnMargin > 0
        lcPixelData = AddMargin(lcPixelData, lnWidth, lnHeight, tnMargin)
        lnWidth = lnWidth + tnMargin * 2
        lnHeight = lnHeight + tnMargin * 2
    ENDIF
    
    * 7. 保存为 BMP
    lResult = SaveGrayAsBMP(lcPixelData, lnWidth, lnHeight, tcOutputPath)
    
    * 8. 释放资源
    ZXing_Image_delete(pImage)
    ZXing_WriterOptions_delete(pWriter)
    ZXing_Barcode_delete(pBarcode)
    ZXing_CreatorOptions_delete(pCreator)
    
    RETURN lResult
ENDFUNC


* [color=#808080]============================================[/color]
* 辅助函数:给图片四周添加空白边距
* [color=#808080]============================================[/color]

FUNCTION AddMargin(tcPixelData, tnWidth, tnHeight, tnMargin)
    LOCAL lnNewWidth, lnNewHeight, lnNewSize, lcNewData
    LOCAL lnRow, lcWhiteRow, lcDataRow
    
    lnNewWidth = tnWidth + tnMargin * 2
    lnNewHeight = tnHeight + tnMargin * 2
    lnNewSize = lnNewWidth * lnNewHeight
    
    * 创建全白背景(灰度值 255 = 白色)
    lcNewData = REPLICATE(CHR(255), lnNewSize)
    
    * 将原图复制到中间位置
    FOR lnRow = 0 TO tnHeight - 1
        * 原图当前行数据
        lcDataRow = SUBSTR(tcPixelData, lnRow * tnWidth + 1, tnWidth)
        
        * 在新图中的起始位置(顶部留白 + 当前行)
        lnNewPos = (tnMargin + lnRow) * lnNewWidth + tnMargin + 1
        
        * 复制数据到新图
        lcNewData = STUFF(lcNewData, lnNewPos, tnWidth, lcDataRow)
    ENDFOR
    
    RETURN lcNewData
ENDFUNC


* [color=#808080]============================================[/color]
* 一键生成并打开(带留白参数)
* [color=#808080]============================================[/color]

FUNCTION QuickBarcode(tcContent, tnFormat, tnScale, tcOutputPath, tnMargin)
    IF EMPTY(tnMargin)
        tnMargin = 20  * 默认留白 20 像素
    ENDIF
    
    IF CreateBarcode(tcContent, tnFormat, tnScale, tcOutputPath, tnMargin)
        = OpenBarcode(tcOutputPath)
        RETURN .T.
    ENDIF
    RETURN .F.
ENDFUNC

* [color=#808080]============================================[/color]
* [color=#800000]5. 辅助函数:用系统默认程序打开图片[/color]
* [color=#808080]============================================[/color]

FUNCTION OpenBarcode(tcFilePath)
    IF FILE(tcFilePath)
        DECLARE Integer ShellExecute IN shell32.dll Integer, String, String, String, String, Integer
        = ShellExecute(0, "open", tcFilePath, "", "", 1)
        RETURN .T.
    ELSE
        RETURN .F.
    ENDIF
ENDFUNC


* [color=#808080]============================================[/color]
* [color=#800000]6. 一键生成并打开[/color]
* [color=#808080]============================================[/color]

FUNCTION QuickBarcode(tcContent, tnFormat, tnScale, tcOutputPath)
    IF CreateBarcode(tcContent, tnFormat, tnScale, tcOutputPath)
        = OpenBarcode(tcOutputPath)
        RETURN .T.
    ENDIF
    RETURN .F.
ENDFUNC


* [color=#808080]============================================[/color]
* [color=#800000]7. 测试示例[/color]
* [color=#808080]============================================[/color]

PROCEDURE TestAllFormats()
    CLEAR
    
    ? "========== 条码生成测试 =========="
    ? ""
    
    * 测试二维码
    ? "1. 生成 QR Code..."
    = QuickBarcode("https://www., ZX_FORMAT_QRCODE, 4, "C:\test_qrcode.bmp")
    
    * 测试 Code128
    ? "2. 生成 Code 128..."
    = QuickBarcode("ABC12345678", ZX_FORMAT_CODE128, 3, "C:\test_code128.bmp")
    
    * 测试 Aztec
    ? "3. 生成 Aztec..."
    = QuickBarcode("AZTEC TEST", ZX_FORMAT_AZTEC, 4, "C:\test_aztec.bmp")
    
    * 测试 DataMatrix
    ? "4. 生成 Data Matrix..."
    = QuickBarcode("DATAMATRIX TEST", ZX_FORMAT_DATAMATRIX, 4, "C:\test_datamatrix.bmp")
    
    * 测试 PDF417
    ? "5. 生成 PDF417..."
    = QuickBarcode("PDF417 TEST", ZX_FORMAT_PDF417, 3, "C:\test_pdf417.bmp")
    
    * 测试 EAN-13
    ? "6. 生成 EAN-13..."
    = QuickBarcode("5901234123457", ZX_FORMAT_EAN13, 3, "C:\test_ean13.bmp")
    
    ? ""
    ? "========== 测试完成 =========="
ENDPROC



生成效果图
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
2026-05-10 00:13
sych
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:496
专家分:748
注 册:2019-10-11
收藏
得分:0 
非常专业
2026-05-10 07:50
快速回复:zxing4vfp条码识别库
数据加载中...
 
   
关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023592 second(s), 10 queries.
Copyright©2004-2026, BCCN.NET, All Rights Reserved