1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| int test_data_matrix_encode() { std::string str = "10,10,10";
DmtxEncode* enc = dmtxEncodeCreate(); assert(enc != NULL); int ret = dmtxEncodeDataMatrix(enc, strlen(str.c_str()), (unsigned char*)str.c_str()); assert(ret == 1);
int width = dmtxImageGetProp(enc->image, DmtxPropWidth); int height = dmtxImageGetProp(enc->image, DmtxPropHeight); int bytesPerPixel = dmtxImageGetProp(enc->image, DmtxPropBytesPerPixel); fprintf(stderr, "image width: %d, image height: %d, channels: %d\n", width, height, bytesPerPixel); assert(bytesPerPixel == 1 || bytesPerPixel == 3 || bytesPerPixel == 4);
cv::Mat mat; if (bytesPerPixel == 1) mat = cv::Mat(height, width, CV_8UC1); else if (bytesPerPixel == 3) mat = cv::Mat(height, width, CV_8UC3); else mat = cv::Mat(height, width, CV_8UC4);
mat.data = enc->image->pxl;
std::string image_name = "E:/data_matrix_encode.jpg"; cv::imwrite(image_name, mat);
dmtxEncodeDestroy(&enc);
return 0; }
int test_data_matrix_decode() { std::string image_name = "E:/GitCode/BarCode_Test/test_images/data_matrix_encode.jpg"; cv::Mat mat = cv::imread(image_name, 1); if (!mat.data) { fprintf(stderr, "read image error\n"); return -1; }
int width = mat.cols; int height = mat.rows; int channels = mat.channels();
DmtxImage* img = dmtxImageCreate(mat.data, width, height, DmtxPack24bppRGB); if (!img) { fprintf(stderr, "dmtx image create fail\n"); return -1; }
DmtxDecode* dec = dmtxDecodeCreate(img, 1); if (!dec) { fprintf(stderr, "dmtx decode create fail\n"); return -1; }
DmtxRegion* reg = dmtxRegionFindNext(dec, nullptr); if (!reg) { fprintf(stderr, "dmtx region fail\n"); return -1; }
DmtxMessage* msg = dmtxDecodeMatrixRegion(dec, reg, DmtxUndefined); if (!msg) { fprintf(stderr, "dmtx decode matrix region fail\n"); return -1; }
std::string str(reinterpret_cast<char*>(msg->output)); fprintf(stderr, "decode result: %s\n", str.c_str());
dmtxMessageDestroy(&msg); dmtxRegionDestroy(®); dmtxDecodeDestroy(&dec); dmtxImageDestroy(&img);
return 0; }
|