编译C++ makefile ZXing-cpp生成条型码 二维码及识别 再试验证成功vs2022

news2024/11/30 12:33:11

下载ZXing-cpp源码及vs2022

cmake --help看看支持的vs

为什么没有win32呢 

进到目录,//新建编译目录//生成vs工程

mkdir build & cd build

cmake ..

中间提示opencv和qt等缺东西不要紧,我只用到生成条型码

release也正常。生成成功。

 

默认是MD 

先看看示例用法:

ZXingWriter.exe  Code128 45789ABC chenhao.jpg

ZXingWriter.exe  QRCode 45789ABC chenhaoQRCode.jpg

成功了。不支持输出bmp,默认是png格式。

识别测试成功:

ZXingReader.exe -format Code128 chenhao.jpg

ZXingReader.exe -format QRCode chenhaoQRCode

 

自带示例源码,真棒:

/*
* Copyright 2016 Nu-book Inc.
*/
// SPDX-License-Identifier: Apache-2.0

#include "BarcodeFormat.h"
#include "BitMatrix.h"
#include "BitMatrixIO.h"
#include "CharacterSet.h"
#include "MultiFormatWriter.h"
#include "ZXVersion.h"

#include <algorithm>
#include <cctype>
#include <cstring>
#include <fstream>
#include <iostream>
#include <string>

#define STB_IMAGE_WRITE_IMPLEMENTATION
#include <stb_image_write.h>

using namespace ZXing;

static void PrintUsage(const char* exePath)
{
	std::cout << "Usage: " << exePath << " [-size <width>x<height>] [-margin <margin>] [-encoding <encoding>] [-ecc <level>] <format> <text> <output>\n"
	          << "    -size      Size of generated image\n"
	          << "    -margin    Margin around barcode\n"
	          << "    -encoding  Encoding used to encode input text\n"
	          << "    -ecc       Error correction level, [0-8]\n"
			  << "    -binary    Interpret <text> as a file name containing binary data\n"
	          << "    -help      Print usage information\n"
			  << "    -version   Print version information\n"
	          << "\n"
			  << "Supported formats are:\n";
	for (auto f : BarcodeFormatsFromString("Aztec Codabar Code39 Code93 Code128 DataMatrix EAN8 EAN13 ITF PDF417 QRCode UPCA UPCE"))
		std::cout << "    " << ToString(f) << "\n";

	std::cout << "Format can be lowercase letters, with or without '-'.\n"
			  << "Output format is determined by file name, supported are png, jpg and svg.\n";
}

static bool ParseSize(std::string str, int* width, int* height)
{
	std::transform(str.begin(), str.end(), str.begin(), [](char c) { return (char)std::tolower(c); });
	auto xPos = str.find('x');
	if (xPos != std::string::npos) {
		*width  = std::stoi(str.substr(0, xPos));
		*height = std::stoi(str.substr(xPos + 1));
		return true;
	}
	return false;
}

static bool ParseOptions(int argc, char* argv[], int* width, int* height, int* margin, CharacterSet* encoding,
						 int* eccLevel, BarcodeFormat* format, std::string* text, std::string* filePath, bool* inputIsFile)
{
	int nonOptArgCount = 0;
	for (int i = 1; i < argc; ++i) {
		auto is = [&](const char* str) { return strncmp(argv[i], str, strlen(argv[i])) == 0; };
		if (is("-size")) {
			if (++i == argc)
				return false;
			if (!ParseSize(argv[i], width, height)) {
				std::cerr << "Invalid size specification: " << argv[i] << std::endl;
				return false;
			}
		} else if (is("-margin")) {
			if (++i == argc)
				return false;
			*margin = std::stoi(argv[i]);
		} else if (is("-ecc")) {
			if (++i == argc)
				return false;
			*eccLevel = std::stoi(argv[i]);
		} else if (is("-encoding")) {
			if (++i == argc)
				return false;
			*encoding = CharacterSetFromString(argv[i]);
		} else if (is("-binary")) {
			*inputIsFile = true;
		} else if (is("-help") || is("--help")) {
			PrintUsage(argv[0]);
			exit(0);
		} else if (is("-version") || is("--version")) {
			std::cout << "ZXingWriter " << ZXING_VERSION_STR << "\n";
			exit(0);
		} else if (nonOptArgCount == 0) {
			*format = BarcodeFormatFromString(argv[i]);
			if (*format == BarcodeFormat::None) {
				std::cerr << "Unrecognized format: " << argv[i] << std::endl;
				return false;
			}
			++nonOptArgCount;
		} else if (nonOptArgCount == 1) {
			*text = argv[i];
			++nonOptArgCount;
		} else if (nonOptArgCount == 2) {
			*filePath = argv[i];
			++nonOptArgCount;
		} else {
			return false;
		}
	}

	return nonOptArgCount == 3;
}

static std::string GetExtension(const std::string& path)
{
	auto fileNameStart = path.find_last_of("/\\");
	auto fileName = fileNameStart == std::string::npos ? path : path.substr(fileNameStart + 1);
	auto extStart = fileName.find_last_of('.');
	auto ext = extStart == std::string::npos ? "" : fileName.substr(extStart + 1);
	std::transform(ext.begin(), ext.end(), ext.begin(), [](char c) { return std::tolower(c); });
	return ext;
}

static std::string ReadFile(const std::string& fn)
{
	std::ifstream ifs(fn, std::ios::binary);
	return ifs ? std::string(std::istreambuf_iterator<char>(ifs), std::istreambuf_iterator<char>()) : std::string();
};

int main(int argc, char* argv[])
{
	int width = 100, height = 100;
	int margin = 10;
	int eccLevel = -1;
	bool inputIsFile = false;
	CharacterSet encoding = CharacterSet::Unknown;
	std::string input, filePath;
	BarcodeFormat format;

	if (!ParseOptions(argc, argv, &width, &height, &margin, &encoding, &eccLevel, &format, &input, &filePath, &inputIsFile)) {
		PrintUsage(argv[0]);
		return -1;
	}

	try {
		auto writer = MultiFormatWriter(format).setMargin(margin).setEncoding(encoding).setEccLevel(eccLevel);

		BitMatrix matrix;
		if (inputIsFile) {
			auto file = ReadFile(input);
			std::wstring bytes;
			for (uint8_t c : file)
				bytes.push_back(c);
			writer.setEncoding(CharacterSet::BINARY);
			matrix = writer.encode(bytes, width, height);
		} else {
			matrix = writer.encode(input, width, height);
		}
		auto bitmap = ToMatrix<uint8_t>(matrix);

		auto ext = GetExtension(filePath);
		int success = 0;
		if (ext == "" || ext == "png") {
			success = stbi_write_png(filePath.c_str(), bitmap.width(), bitmap.height(), 1, bitmap.data(), 0);
		} else if (ext == "jpg" || ext == "jpeg") {
			success = stbi_write_jpg(filePath.c_str(), bitmap.width(), bitmap.height(), 1, bitmap.data(), 0);
		} else if (ext == "svg") {
			success = (std::ofstream(filePath) << ToSVG(matrix)).good();
		}

		if (!success) {
			std::cerr << "Failed to write image: " << filePath << std::endl;
			return -1;
		}
	} catch (const std::exception& e) {
		std::cerr << e.what() << std::endl;
		return -1;
	}

	return 0;
}

不用看下面-------------------------------------------

 VS2017报错

cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_BUILD_TYPE=Release ..

生成vs2017工程

用vs2017选release编译, 其它什么也不改。

居然报错。        

 单独先编译zxing

 还是报错。

PDFCodewordDecoder.cpp(431): error C2131: 表达式的计算结果不是常数

编译C++ makefile ZXing-cpp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/527797.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记一次 .NET 某医院门诊软件 卡死分析

一&#xff1a;背景 1. 讲故事 前几天有位朋友找到我&#xff0c;说他们的软件在客户那边卡死了&#xff0c;让我帮忙看下是怎么回事&#xff1f;我就让朋友在程序卡死的时候通过 任务管理器 抓一个 dump 下来&#xff0c;虽然默认抓的是 wow64 &#xff0c;不过用 soswow64.…

FreeRTOS学习笔记(四)——应用开发(二)

文章目录 0x01 互斥量互斥量的优先级继承机制互斥量应用场景互斥量运作机制互斥量控制块互斥量接口函数xSemaphoreCreateMutex()xQueueCreateMutex()prvInitialiseMutex&#xff08;&#xff09;xSemaphoreCreateRecursiveMutex()vSemaphoreDelete()xSemaphoreTake()xQueueSema…

通过nginx配置 将vue项目运行到阿里云linux服务器上

先将 我们的vue项目打包起来 打包好之后 我们在项目根目录下 找到 dist 下的 index.html 保证这个文件要能正常运行 然后 我们将这个dist文件夹 压缩一下 然后 回到项目终端 执行 scp -r ./dist.zip 用户名(如果之前没设置过就是 root)服务器公网地址:/root然后 他会要求我…

多语言网站的外包开发流程

随着互联网/移动互联网的全球普及&#xff0c;越来越多的企业希望将产品卖向全球&#xff0c;这就首先需要有一个多语言的网站来宣传公司的产品&#xff0c;那设计和开发这样的网站需要注意什么呢&#xff0c;今天和大家分享这方面的知识。北京木奇移动技术有限公司&#xff0c…

C-函数栈帧

文章目录 函数栈帧栈帧创建栈帧销毁根据栈帧关系更改值拓展 可变参数列表基本原理整形提升 命令行参数打印环境变量 函数栈帧 int MyAdd(int a, int b) {int c 0;c a b;return c; } int main() {int x 0xA;int y 0xB;int z MyAdd(x,y);system("pause");return …

怎么隐藏回收站?3个方法轻松隐藏回收站!

案例&#xff1a;怎么隐藏回收站 【我不太想把回收站放到桌面上&#xff0c;想把它隐藏了&#xff0c;请问大家有什么好的方法可以隐藏回收站吗&#xff1f;】 回收站是一个非常常见的功能&#xff0c;允许用户恢复已删除的文件。然而&#xff0c;有些人可能不希望回收站一直…

SpringMVC高手进阶

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开兴好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

【MySQL】-- 数据库基础

目录 MySQL概述 MySQL初期概念 小结 主流数据库 连接服务器 服务器&#xff0c;数据库&#xff0c;表关系 数据逻辑存储 MySQL架构 SQL分类 存储引擎 存储引擎 查看存储引擎 MySQL概述 #问&#xff1a;什么是数据库&#xff1f; MySQL初期概念 这个所谓的mysql严格…

从零开始Vue3+Element Plus后台管理系统(七)——手写一个简单的多页签组件

以前都是用别人现成的多页签组件&#xff0c;自己也想尝试下做个Vue3的版本&#xff0c;目前还只有基本功能&#xff0c;慢慢完善。 主要思路 使用 Pinia 记录页签数据、处理操作初始状态没有页签数据&#xff0c;使用默认路由数据填充右击页签&#xff0c;显示更多关闭操作…

移动云与启明星辰联合发布移动云|星辰安全品牌

数字中国时代&#xff0c;企业数字化转型不断深化&#xff0c;云安全市场发展持续高增&#xff0c;其安全更需自主可控、全程可信。基于此&#xff0c;移动云和启明星辰共同打造移动云|星辰安全品牌&#xff0c;聚力协行共筑安全云的压舱石&#xff0c;携手共塑中国云安全产业发…

原神服务器服务端多人联机教程

原神服务器服务端多人联机教程 大家好&#xff0c;我是艾西在上一篇文章中我们说了win系统服务器怎么搭建原神服务端&#xff0c;在最后结尾时有带一嘴怎么改为多人联机但不是很详细。哪么这篇文章艾西会给小伙伴们说清楚原神服务端怎么改为多人联机&#xff0c;毕竟玩游戏肯定…

MySQL高级语句(一)

一、SQL高级语句 1、 SELECT 显示表格中一个或数个栏位的所有资料 语法&#xff1a;SELECT "字段" FROM "表名"; select * from test1; select name from test1; select name,sex from test1;2、DISTINCT 不显示重复的内容 语法&#xff1a;SELECT D…

pdf怎么转换成ppt?4种方法1分钟处理

​ pdf怎么转换成ppt&#xff1f;在日常的办公中&#xff0c;经常需要进行PDF文件格式的转换。例如&#xff0c;我们从互联网上下载的许多资料都是以PDF格式保存的。此外&#xff0c;在使用Microsoft Office时&#xff0c;有些用户需要将Word文档转换为PDF格式&#xff0…

MySQL的概念、编译安装,以及自动补全

一.数据库的基本概念 1、数据&#xff08;Data&#xff09; • 描述事物的符号记录 • 包括数字&#xff0c;文字&#xff0c;图形&#xff0c;图像&#xff0c;声音&#xff0c;档案记录等 • 以“记录”形式按统一的格式进行存储 2、表 • 将不同的记录组织在一起 • …

JavaWeb08(MVC应用02[家居商城]连接数据库)

目录 一.绑定分类 1.1 效果预览 1.2 代码实现 ①底层代码 ②前端代码 二.绑定所有商品 2.1 效果预览 2.2.代码实现 ①底层代码 ②前端代码 三.分类查询 3.1效果预览 3.2代码实现 ①底层代码 ②前端代码 四.模糊查询 4.1 效果预览 4.2代码实现 ①底层代码 ②前…

一图看懂 zipp 模块:ZipFile 的一些兼容子类和补充接口,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 zipp 模块&#xff1a;ZipFile 的一些兼容子类和补充接口&#xff0c;资料整理笔记&#xff08;大全&#xff09; &#x1f9ca;摘要&#x1f9ca;模块图&#x1f9ca;类关…

直观理解torch.gather函数(带图)

直观理解torch.gather函数 1. gather的作用 因为深度学习里面&#xff0c;像分类或者分割&#xff0c;有时候去进行loss计算或准确度计算的时候&#xff0c;需要挑选某个维度特定的值&#xff0c;所以有了这么个函数。注意不要高估这个函数的能力&#xff0c;这个函数只是在指…

大数据技术之Sqoop

第1章 Sqoop简介 Sqoop是一款开源的工具&#xff0c;主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递&#xff0c;可以将一个关系型数据库&#xff08;例如 &#xff1a; MySQL ,Oracle ,Postgres等&#xff09;中的数据导进到Hadoop的HDFS中&…

破案小说中的《人月神话》和女装

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> 在破案小说《谁是凶手》中&#xff0c;《人月神话》、《程序员修炼之道》以及女装作为素材出现了。 成功学&#xff08;鸡汤学&#xff09;书籍《用所有的存在与世界相会》…

如何制定一套有效的期货交易系统策略?

期货交易是一项全球性的金融交易&#xff0c;对于投资者来说&#xff0c;制定有效的期货交易系统策略是至关重要的。在制定期货交易策略时&#xff0c;需要考虑市场趋势、资产种类、交易成本、仓位控制等多个方面。 很多刚进入期货市场的朋友&#xff0c;甚至很多做了很久期货…