2016/10/20

Create barcode using Zint static library

이전 글에서 작성한 대로 생성한 Zint 정적 라이브러리를 이용하여 바코드를 생성해 보았다.
Build Zint static library on windows

라이브러리는 정상적으로 동작을 하였다.
사용법은 설명 보다는 코드로 남기는 것이 이해가 쉬울 것 같아 코드로 남긴다.

struct zint_symbol *pZintSymbolStruct;

    // Zint symbol 생성
    pZintSymbolStruct = ZBarcode_Create();
    if (pZintSymbolStruct != nullptr)
    {
        TRACE("Symbol successfully created!\n");

        // 생성할 바코드 문자열. 최대 128자
        unsigned char szBuf[ZINT_TEXT_SIZE] = "created barcode by Zint\0";

        // 주어진 문자열로 바코드 생성.
        // 문자열 길이를 0으로 입력하면 입력된 문자열의 첫번째 Null 까지 Encode.
        ZBarcode_Encode(pZintSymbolStruct, szBuf, 0);

        // 생성한 바코드를 파일로 저장.
        // 바코드 타입을 설정하지 않으면 기본으로 Code 128이 설정된다.
        // Symbol 생성시 기본 출력 파일 이름은 out.png
        // 각도는 0, 90, 180, 270 를 입력할 수 있다.
        // 그 이외의 각도를 넘기면 예외가 발생한다.
        ZBarcode_Print(pZintSymbolStruct, 0);


        // Symbol 초기화
        ZBarcode_Clear(pZintSymbolStruct);
        // Barcode를 QRCode로 지정
        pZintSymbolStruct->symbology = BARCODE_QRCODE;
        // 출력 파일은 out2.png로 지정
        strcpy_s(pZintSymbolStruct->outfile, FILENAME_MAX, "out2.png");
        // 바코드로 생성할 문자열 설정
        strcpy_s((char*)szBuf, ZINT_TEXT_SIZE, "한글 바코드, 韓字!");
        // 인코딩과 파일 저장을 한번에 수행
        ZBarcode_Encode_and_Print(pZintSymbolStruct, szBuf, 0, 0);


        // Symbol 초기화
        ZBarcode_Clear(pZintSymbolStruct);
        pZintSymbolStruct->symbology = BARCODE_QRCODE;
        strcpy_s((char*)szBuf, ZINT_TEXT_SIZE, "메모리에 바코드 생성");
        // 바코드를 인코딩하여 메모리에 저장
        // 바코드는 pZintSymbolStruct->bitmap 에 저장
        ZBarcode_Encode_and_Buffer(pZintSymbolStruct, szBuf, 0, 270);

        // 메모리에 저장된 바코드 이미지를 이용하여 OpenCV Mat 생성
        cv::Mat matBarcode = cv::Mat(
            pZintSymbolStruct->bitmap_height
            , pZintSymbolStruct->bitmap_width
            , CV_8UC3
            , pZintSymbolStruct->bitmap);

        // 화면에 보여주기
        cv::namedWindow("Barcode");
        cv::imshow("Barcode", matBarcode);
    }

    // Symbol 삭제
    ZBarcode_Delete(pZintSymbolStruct);

zint_symbol 구조체에 여러 설정을 하여 바코드를 생성할 수 있다.
설정할 수 있는 항목은 여백, 배경색, 전경색, 테두리 등을 설정할 수 있다.
자세한 설정 방법은 Zint 매뉴얼(http://www.zint.org.uk/Manual.aspx?type=p&page=1)에 설명되어 있다.

No comments :

Post a Comment