亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dmtxread.c

?? Linux系統下,二維碼生成源代碼.希望對大家有所幫助.
?? C
字號:
/*libdmtx - Data Matrix Encoding/Decoding LibraryCopyright (C) 2006 Mike LaughtonThis library is free software; you can redistribute it and/ormodify it under the terms of the GNU Lesser General PublicLicense as published by the Free Software Foundation; eitherversion 2.1 of the License, or (at your option) any later version.This library is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNULesser General Public License for more details.You should have received a copy of the GNU Lesser General PublicLicense along with this library; if not, write to the Free SoftwareFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USAContact: mike@dragonflylogic.com*//* $Id: dmtxread.c,v 1.12 2006/10/15 19:39:44 mblaughton Exp $ */#include <stdlib.h>#include <stdio.h>#include <string.h>#include <getopt.h>#include <errno.h>#include <ctype.h>#include <stdarg.h>#include <assert.h>#include <png.h>#include <tiffio.h>#include <dmtx.h>#include "dmtxread.h"#define DMTXREAD_SUCCESS     0#define DMTXREAD_ERROR       1#define MIN(x,y) ((x < y) ? x : y)static int HandleArgs(ScanOptions *options, int *argcp, char **argvp[], int *fileIndex);static long StringToLong(char *numberString);static void ShowUsage(int status);static void FatalError(int errorCode, char *fmt, ...);static ImageFormat GetImageFormat(char *imagePath);static int LoadImage(DmtxImage *image, char *imagePath, int imageIndex);static int LoadImagePng(DmtxImage *image, char *imagePath);static int LoadImageTiff(DmtxImage *image, char *imagePath, int imageIndex);static int ScanImage(ScanOptions *options, DmtxDecode *decode, char *prefix);char *programName;/** * Main function for the dmtxread Data Matrix scanning utility. * * @param  argc count of arguments passed from command line * @param  argv list of argument passed strings from command line * @return      numeric success / failure exit code */intmain(int argc, char *argv[]){   int err;   int fileIndex;   DmtxDecode *decode;   ScanOptions options;   char *imagePath;   char prefix[16];   int imageCount;   int imageIndex;   err = HandleArgs(&options, &argc, &argv, &fileIndex);   if(err)      ShowUsage(err);   decode = dmtxDecodeStructCreate();   decode->option = DmtxSingleScanOnly;   while(fileIndex < argc) {      imagePath = argv[fileIndex];      imageIndex = 0;      do {         dmtxImageInit(&(decode->image));         imageCount = LoadImage(&(decode->image), imagePath, imageIndex++);         if(imageCount == 0)            break;         memset(prefix, 0x00, 16);         if(options.pageNumber)            snprintf(prefix, 15, "%d:", imageIndex);         else            *prefix = '\0';         ScanImage(&options, decode, prefix);         dmtxImageDeInit(&(decode->image));      } while(imageIndex < imageCount);      fileIndex++;   }   dmtxDecodeStructDestroy(&decode);   exit(0);}/** * Sets and validates user-requested options from command line arguments. * * @param options    runtime options from defaults or command line * @param  argcp     pointer to argument count * @param  argvp     pointer to argument list * @param  fileIndex pointer to index of first non-option arg (if successful) * @return           DMTXREAD_SUCCESS | DMTXREAD_ERROR */static intHandleArgs(ScanOptions *options, int *argcp, char **argvp[], int *fileIndex){   int opt;   int longIndex;   struct option longOptions[] = {         {"count",       required_argument, NULL, 'c'},         {"vertical",    required_argument, NULL, 'v'},         {"horizontal",  required_argument, NULL, 'h'},         {"page-number", no_argument,       NULL, 'n'},         {"help",        no_argument,       NULL,  0 },         {0, 0, 0, 0}   };   programName = (*argvp)[0];   if(programName && strrchr(programName, '/'))      programName = strrchr(programName, '/') + 1;   memset(options, 0x00, sizeof(ScanOptions));   options->maxCount = 0; // Unlimited   options->hScanCount = 10;   options->vScanCount = 10;   options->pageNumber = 0;   *fileIndex = 0;   for(;;) {      opt = getopt_long(*argcp, *argvp, "c:v:h:n", longOptions, &longIndex);      if(opt == -1)         break;      switch(opt) {         case 0: // --help            ShowUsage(0);            break;         case 'c':            options->maxCount = StringToLong(optarg);            break;         case 'v':            options->vScanCount = StringToLong(optarg);            break;         case 'h':            options->hScanCount = StringToLong(optarg);            break;         case 'n':            options->pageNumber = 1;            break;         default:            return DMTXREAD_ERROR;            break;      }   }   *fileIndex = optind;   // File not specified   if(*fileIndex == *argcp) {      if(*argcp == 1)         return DMTXREAD_ERROR;      else         FatalError(1, _("Must specify image file\n"));   }   return DMTXREAD_SUCCESS;}/** * Convert a string of characters to a long integer.  If string cannot be * converted then the function will abort the program. * * @param numberString pointer to string of numbers * @return             converted long */static longStringToLong(char *numberString){   long numberLong;   char *trailingChars;   errno = 0;   numberLong = strtol(numberString, &trailingChars, 10);   while(isspace(*trailingChars))      trailingChars++;   if(errno != 0 || *trailingChars != '\0')      FatalError(2, _("Invalid number \"%s\""), numberString);   return numberLong;}/** * Display program usage and exit with received status. * * @param status error code returned to OS * @return       void */static voidShowUsage(int status){   if(status != 0) {      fprintf(stderr, _("Usage: %s [OPTION]... [FILE]...\n"), programName);      fprintf(stderr, _("Try `%s --help' for more information.\n"), programName);   }   else {      fprintf(stdout, _("Usage: %s [OPTION]... [FILE]...\n"), programName);      fprintf(stdout, _("\Scan FILE (a PNG image) for Data Matrix barcodes and print decoded results\n\to STDOUT.  Note that %s may find multiple barcodes in one image.\n\\n\Example: %s -v 4 -h 4 IMAGE001.png IMAGE002.png\n\\n\OPTIONS:\n"), programName, programName);      fprintf(stdout, _("\  -c, --count=NUM            stop after finding NUM barcodes\n\  -v, --vertical=NUM         use NUM vertical scan lines in scan pattern\n\  -h, --horizontal=NUM       use NUM horizontal scan lines in scan pattern\n\  -n, --page-number          prefix decoded messages with corresponding page number\n\      --help                 display this help and exit\n"));      fprintf(stdout, _("\nReport bugs to <mike@dragonflylogic.com>.\n"));   }   exit(status);}/** * Display error message and exit with error status. * * @param errorCode error code returned to OS * @param fmt       error message format for printing * @return          void */static voidFatalError(int errorCode, char *fmt, ...){   va_list va;   va_start(va, fmt);   fprintf(stderr, "%s: ", programName);   vfprintf(stderr, fmt, va);   va_end(va);   fprintf(stderr, "\n\n");   fflush(stderr);   exit(errorCode);}/** * */static ImageFormatGetImageFormat(char *imagePath){   char *extension, *ptr;   // XXX Right now this determines file type based on filename extension.   // XXX Not ideal -- but only temporary.   assert(imagePath != NULL);   ptr = strrchr(imagePath, '/');   extension = (ptr == NULL) ? imagePath : ptr + 1;   ptr = strrchr(extension, '.');   extension = (ptr == NULL) ? NULL : ptr + 1;   if(extension == NULL)      return ImageFormatUnknown;   else if(strncmp(extension, "png", 3) == 0 || strncmp(extension, "PNG", 3) == 0)      return ImageFormatPng;   else if(strncmp(extension, "tif", 3) == 0 || strncmp(extension, "TIF", 3) == 0)      return ImageFormatTiff;   return ImageFormatUnknown;}/** * */static intLoadImage(DmtxImage *image, char *imagePath, int imageIndex){   int imageCount;   ImageFormat imageFormat;   imageFormat = GetImageFormat(imagePath);   switch(imageFormat) {      case ImageFormatPng:         imageCount = LoadImagePng(image, imagePath);         break;      case ImageFormatTiff:         imageCount = LoadImageTiff(image, imagePath, imageIndex);         break;      default:         imageCount = 0;         break;   }   return imageCount;}/** * Load data from PNG file into DmtxImage format. * * @param image     pointer to DmtxImage structure to be populated * @param imagePath path/name of PNG image * @return          DMTX_SUCCESS | DMTX_FAILURE */static intLoadImagePng(DmtxImage *image, char *imagePath){   png_byte        pngHeader[8];   FILE            *fp;   int             isPng;   int             bitDepth, colorType, interlaceType, compressionType, filterMethod;   int             row;   png_uint_32     width, height;   png_structp     pngPtr;   png_infop       infoPtr;   png_infop       endInfo;   png_bytepp      rowPointers;   fp = fopen(imagePath, "rb");   if(fp == NULL) {      perror(programName);      return 0;   }   fread(pngHeader, 1, sizeof(pngHeader), fp);   isPng = !png_sig_cmp(pngHeader, 0, sizeof(pngHeader));   if(!isPng)      return 0;   pngPtr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);   if(pngPtr == NULL) {      png_destroy_read_struct(&pngPtr, (png_infopp)NULL, (png_infopp)NULL);      return 0;   }   infoPtr = png_create_info_struct(pngPtr);   if(infoPtr == NULL) {      png_destroy_read_struct(&pngPtr, (png_infopp)NULL, (png_infopp)NULL);      return 0;   }   endInfo = png_create_info_struct(pngPtr);   if(endInfo == NULL) {      png_destroy_read_struct(&pngPtr, &infoPtr, (png_infopp)NULL);      return 0;   }   if(setjmp(png_jmpbuf(pngPtr))) {      png_destroy_read_struct(&pngPtr, &infoPtr, &endInfo);      fclose(fp);      return 0;   }   png_init_io(pngPtr, fp);   png_set_sig_bytes(pngPtr, sizeof(pngHeader));   png_read_info(pngPtr, infoPtr);   png_get_IHDR(pngPtr, infoPtr, &width, &height, &bitDepth, &colorType,         &interlaceType, &compressionType, &filterMethod);   png_set_strip_16(pngPtr);   png_set_strip_alpha(pngPtr);   png_set_packswap(pngPtr);   if(colorType == PNG_COLOR_TYPE_PALETTE)      png_set_palette_to_rgb(pngPtr);   if (colorType == PNG_COLOR_TYPE_GRAY || PNG_COLOR_TYPE_GRAY_ALPHA)      png_set_gray_to_rgb(pngPtr);   png_read_update_info(pngPtr, infoPtr);   png_get_IHDR(pngPtr, infoPtr, &width, &height, &bitDepth, &colorType,         &interlaceType, &compressionType, &filterMethod);   rowPointers = (png_bytepp)png_malloc(pngPtr, sizeof(png_bytep) * height);   if(rowPointers == NULL) {      perror(programName);      // free first?      return 0;   }   for(row = 0; row < height; row++) {      rowPointers[row] = (png_bytep)png_malloc(pngPtr,            png_get_rowbytes(pngPtr, infoPtr));   }   png_read_image(pngPtr, rowPointers);   png_read_end(pngPtr, infoPtr);   png_destroy_read_struct(&pngPtr, &infoPtr, &endInfo);   // Use PNG information to populate DmtxImage information   image->width = width;   image->height = height;   image->pxl = (DmtxPixel *)malloc(image->width * image->height *         sizeof(DmtxPixel));   if(image->pxl == NULL) {      perror(programName);      // free first?      return 0;   }   // This copy reverses row order top-to-bottom so image coordinate system   // corresponds with normal "right-handed" 2D space   for(row = 0; row < image->height; row++) {      memcpy(image->pxl + (row * image->width), rowPointers[image->height - row - 1], image->width * sizeof(DmtxPixel));   }   for(row = 0; row < height; row++) {      png_free(pngPtr, rowPointers[row]);   }   png_free(pngPtr, rowPointers);   fclose(fp);   return 1;}/** * Load data from TIFF file into DmtxImage format. * * @param image    pointer to DmtxImage structure to be populated * @param filename path/name of PNG image * @return         number of images loaded */static intLoadImageTiff(DmtxImage *image, char *imagePath, int imageIndex){   int dirIndex = 0;   TIFF* tif;   int row, col, offset;   uint32 w, h;   uint32* raster;   size_t npixels;   tif = TIFFOpen(imagePath, "r");   if(tif == NULL) {      perror(programName);      return 0;   }   do {      if(dirIndex == imageIndex) {         TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w);         TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h);         npixels = w * h;         raster = (uint32*) _TIFFmalloc(npixels * sizeof (uint32));         if(raster == NULL) {            perror(programName);            // free before returning            return 0;         }         if(TIFFReadRGBAImage(tif, w, h, raster, 0)) {            // Use TIFF information to populate DmtxImage information            image->width = w;            image->height = h;            image->pxl = (DmtxPixel *)malloc(image->width * image->height * sizeof(DmtxPixel));            if(image->pxl == NULL) {               perror(programName);               // free before returning               return 0;            }            // This copy reverses row order top-to-bottom so image coordinate system            // corresponds with normal "right-handed" 2D space            for(row = 0; row < image->height; row++) {               for(col = 0; col < image->width; col++) {                  // XXX TIFF uses ABGR packed                  offset = row * image->width + col;                  image->pxl[offset].R = raster[offset] & 0x000000ff;                  image->pxl[offset].G = (raster[offset] & 0x0000ff00) >> 8;                  image->pxl[offset].B = (raster[offset] & 0x00ff0000) >> 16;               }            }         }         _TIFFfree(raster);      }      dirIndex++;   } while(TIFFReadDirectory(tif));   TIFFClose(tif);   return dirIndex;}/** * Scan image for Data Matrix barcodes and print decoded data to STDOUT. * * @param options   runtime options from defaults or command line * @param decode    pointer to DmtxDecode struct * @return          DMTXREAD_SUCCESS | DMTXREAD_ERROR */static intScanImage(ScanOptions *options, DmtxDecode *decode, char *prefix){   int row, col;   int hScanGap, vScanGap;   unsigned char outputString[1024];   DmtxMatrixRegion *matrixRegion;   dmtxScanStartNew(decode);   hScanGap = (int)((double)decode->image.width/options->hScanCount + 0.5);   vScanGap = (int)((double)decode->image.height/options->vScanCount + 0.5);   for(col = hScanGap; col < decode->image.width; col += hScanGap)      dmtxScanLine(decode, DmtxDirUp, col);   for(row = vScanGap; row < decode->image.height; row += vScanGap)      dmtxScanLine(decode, DmtxDirRight, row);   if(dmtxDecodeGetMatrixCount(decode) > 0) {      matrixRegion = dmtxDecodeGetMatrix(decode, 0);      memset(outputString, 0x00, 1024);      strncpy((char *)outputString, (const char *)matrixRegion->output, MIN(matrixRegion->outputIdx, 1023));      fprintf(stdout, "%s%s\n", prefix, outputString);   }   return DMTXREAD_SUCCESS;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩情涩欧美日韩视频| 精品在线一区二区| 春色校园综合激情亚洲| 国产午夜久久久久| 国产成+人+日韩+欧美+亚洲| 国产欧美精品一区| 成人av片在线观看| 一区二区三区精品视频在线| 91免费视频观看| 午夜视黄欧洲亚洲| 欧美成人vr18sexvr| 丁香啪啪综合成人亚洲小说| 国产精品视频免费看| 日本久久一区二区| 免费在线看一区| 欧美高清在线一区二区| 色综合久久天天综合网| 天天影视色香欲综合网老头| 日韩精品影音先锋| 成人免费观看av| 亚洲一区二区三区视频在线播放 | 亚洲精品日韩综合观看成人91| 一本色道**综合亚洲精品蜜桃冫| 亚洲超碰97人人做人人爱| 欧美变态凌虐bdsm| 色综合久久天天| 蜜桃视频在线观看一区二区| 中文在线资源观看网站视频免费不卡| 一本色道久久综合亚洲精品按摩 | 樱桃视频在线观看一区| 91精品婷婷国产综合久久性色| 国产精品一二三在| 亚洲成人777| 国产无遮挡一区二区三区毛片日本| 91久久精品一区二区三| 免费在线观看一区| 自拍偷自拍亚洲精品播放| 欧美一级理论片| 色婷婷一区二区三区四区| 精品亚洲国产成人av制服丝袜 | 国产精品1区二区.| 亚洲成在线观看| 亚洲欧美综合另类在线卡通| 91精品国产综合久久国产大片| a美女胸又www黄视频久久| 日本美女视频一区二区| 亚洲欧洲综合另类| 日本一区二区三区四区| 日韩精品一区二区三区视频| 在线视频你懂得一区| 国产成+人+日韩+欧美+亚洲| 日韩一区欧美二区| 亚洲欧美日韩国产综合在线| 久久精品人人做人人爽97| 正在播放亚洲一区| 欧美亚洲国产怡红院影院| 波多野结衣中文字幕一区二区三区| 奇米四色…亚洲| 亚洲国产一区二区在线播放| 中文字幕在线观看一区二区| 久久精品亚洲国产奇米99| 欧美一级二级在线观看| 欧美日韩不卡一区二区| 在线免费观看日本一区| 91免费看片在线观看| 99国产精品国产精品久久| 国产精品综合视频| 国产一区二区三区香蕉| 日日噜噜夜夜狠狠视频欧美人| 亚洲免费高清视频在线| 亚洲欧洲av在线| 国产精品欧美一级免费| 国产欧美日韩精品a在线观看| 欧美α欧美αv大片| 精品区一区二区| 精品美女一区二区| 久久综合九色综合欧美就去吻| 欧美一区2区视频在线观看| 欧美乱妇15p| 欧美丰满少妇xxxbbb| 欧美精品三级在线观看| 欧美肥大bbwbbw高潮| 欧美巨大另类极品videosbest| 欧美日本精品一区二区三区| 欧美日韩在线电影| 欧美一级黄色大片| 久久综合999| 中文字幕欧美国产| 亚洲欧美另类小说| 亚洲成a天堂v人片| 美美哒免费高清在线观看视频一区二区 | 成人av在线资源网| 成人av手机在线观看| 日本乱码高清不卡字幕| 欧美日韩国产一区二区三区地区| 911国产精品| 久久综合九色综合久久久精品综合| 久久先锋影音av| 亚洲色图视频网站| 亚洲线精品一区二区三区| 婷婷久久综合九色国产成人 | 狠狠色狠狠色合久久伊人| 国产综合成人久久大片91| 成人app软件下载大全免费| 色94色欧美sute亚洲线路一ni| 欧美日韩免费在线视频| 日韩精品专区在线影院观看| 国产日韩欧美一区二区三区综合| 国产精品成人一区二区三区夜夜夜| 一区二区三区欧美激情| 日本不卡视频在线观看| 成人免费视频网站在线观看| 日本道色综合久久| 精品成人私密视频| 亚洲人精品午夜| 美女网站色91| 99久久国产综合精品女不卡| 欧美久久一二区| 国产精品久久久久aaaa樱花 | 亚洲黄网站在线观看| 美女视频网站久久| 91色|porny| 欧美tickling挠脚心丨vk| 一区二区三区不卡视频在线观看| 奇米综合一区二区三区精品视频| 成+人+亚洲+综合天堂| 91精品国产综合久久蜜臀| 国产欧美一区二区三区沐欲 | 欧美一个色资源| 国产精品久久影院| 日本视频免费一区| bt欧美亚洲午夜电影天堂| 91精品国产美女浴室洗澡无遮挡| 国产精品乱码一区二区三区软件| 日韩二区在线观看| 在线观看视频一区二区欧美日韩| 久久久久9999亚洲精品| 奇米在线7777在线精品| 日本伦理一区二区| 中文字幕在线观看不卡| 国产精品自产自拍| 日韩美一区二区三区| 五月天亚洲精品| 91免费版pro下载短视频| 国产亚洲人成网站| 老色鬼精品视频在线观看播放| 欧美三级韩国三级日本三斤| 亚洲欧洲在线观看av| 国产99久久久久| 欧美电视剧在线观看完整版| 五月婷婷综合网| 欧美影院精品一区| 一区二区三区在线免费观看| 国产91富婆露脸刺激对白| 欧美成人综合网站| 天天亚洲美女在线视频| 欧美精品日日鲁夜夜添| 亚洲地区一二三色| 欧美精选一区二区| 婷婷国产v国产偷v亚洲高清| 精品视频资源站| 性做久久久久久免费观看欧美| 91一区二区在线观看| 中文字幕乱码亚洲精品一区 | 亚洲视频在线一区| 午夜精品影院在线观看| 成人性生交大片免费看在线播放| 久久综合色鬼综合色| 亚洲成人免费av| 久久99精品久久只有精品| 国产丝袜美腿一区二区三区| 日韩精品福利网| 色久优优欧美色久优优| 亚洲免费在线观看| 欧美性猛片aaaaaaa做受| 中文字幕不卡的av| 成人亚洲精品久久久久软件| 久久精品人人做| 国产精品一区二区免费不卡| 亚洲精品一区二区在线观看| 日韩av在线播放中文字幕| 欧美午夜影院一区| 亚洲国产欧美在线| 欧美在线免费观看亚洲| 视频在线在亚洲| 在线不卡的av| 日韩精品一二三| 欧美大片免费久久精品三p| 七七婷婷婷婷精品国产| 日韩欧美一级在线播放| 国产精品18久久久久久久久久久久 | 床上的激情91.| 欧美r级电影在线观看| 青青草一区二区三区| 日韩一区二区三免费高清| 青娱乐精品视频| 欧美日韩电影在线| 国产精品中文有码| 国产精品久久久久9999吃药| 成人免费观看av|