【发布时间】:2012-02-12 14:26:25
【问题描述】:
我在我的 iOS 项目中使用了一个 zxing 库。这是一个用于读取和创建二维码的库。
根据我在网络上的研究和浏览,解码图像的过程由以下步骤组成:
- 从源获取图像,
- 将所有像素转换为 255 灰度
- 解码数据
这个特定库不支持的一件事是读取/解码(我很确定这在创建时也缺少)倒置 QRCode。
倒转二维码与普通码基本相同->但颜色倒转(白色为黑色,黑色为白色)。但是因为二维码标准没有描述倒置二维码的实现,zxing项目网站上也有一些要求和问题,我必须自己实现。
下面的方法是插入一些逻辑来反转像素的好地方(unsigned char*),但由于我对 C++ 没有经验,所以写了这篇文章。
grayData_ 是 unsigned char* 数据类型。在这个变量里面有来自源的灰度像素。
我想做的是反转这些像素。
如果我是正确的,这是由 unsigned char cz = (255 - val); 完成的?
unsigned char* GreyscaleLuminanceSource::getMatrix() {
int size = width_ * height_;
unsigned char* result = new unsigned char[size];
if (left_ == 0 && top_ == 0 && dataWidth_ == width_ && dataHeight_ == height_) {
memcpy(result, greyData_, size);
} else {
for (int row = 0; row < height_; row++) {
memcpy(result + row * width_, greyData_ + (top_ + row) * dataWidth_ + left_, width_);
}
}
//return result;
//from this point down is my implementation
printf(" %c", result[200]);
printf(" %c", result[600]);
printf(" %c", result[6000]);
printf(" %c", result[7000]);
for (int i = 0; i < size; i++)
{
int val = static_cast<int>(result[i]);
unsigned char cz = (255 - val);
result[i] = cz;
}
printf("******\n");
printf(" %c", result[200]); //prints a " " char to console/terminal
printf(" %c", result[600]); //prints a " " char to console/terminal
printf(" %c", result[6000]); //prints a " " char to console/terminal
printf(" %c", result[7000]); //prints a " " char to console/terminal
return result;
}
这是反转像素的正确方法吗?而且我对更改 result 变量中的数据不太满意。
【问题讨论】:
-
如何在 Android 应用程序中添加/编辑该 C++ 代码?
-
弗朗西斯,您是否已将您在 iOS 上使用 ZXing 支持倒排条码所做的更改放入了其他人可能可以使用的开源存储库中?我们需要相同的功能。谢谢!