diff options
author | Tae-Young Chung <ty83.chung@samsung.com> | 2016-04-06 17:33:08 +0900 |
---|---|---|
committer | Tae-Young Chung <ty83.chung@samsung.com> | 2016-04-19 08:59:24 +0900 |
commit | d1e0940087db9cf006aa9ce7a3c6e47a02c048cb (patch) | |
tree | 030718db1d0903fb7f82e12fab68ffa45cc123b6 /mv_barcode | |
parent | 901c93be027012ea1c52fc1ce09d33639a99ada4 (diff) | |
download | mediavision-d1e0940087db9cf006aa9ce7a3c6e47a02c048cb.tar.gz mediavision-d1e0940087db9cf006aa9ce7a3c6e47a02c048cb.tar.bz2 mediavision-d1e0940087db9cf006aa9ce7a3c6e47a02c048cb.zip |
Add new definitions for coloring barcodes
Change-Id: Ie25ef74b097c5cdcf291f28de9e92321ffc6a808
Signed-off-by: Tae-Young Chung <ty83.chung@samsung.com>
Diffstat (limited to 'mv_barcode')
3 files changed, 182 insertions, 16 deletions
diff --git a/mv_barcode/barcode_generator/include/BarcodeGenerator.h b/mv_barcode/barcode_generator/include/BarcodeGenerator.h index 7e135325..1625dd66 100644 --- a/mv_barcode/barcode_generator/include/BarcodeGenerator.h +++ b/mv_barcode/barcode_generator/include/BarcodeGenerator.h @@ -50,6 +50,8 @@ public: * @param [in] correctionLevel Error correction level (for QR codes only) * @param [in] qrVersion QR code version (1 ~ 40, 0 for 1D barcodes) * @param [in] showText Show text or not + * @param [in] fgcolour Foreground colour of barcode + * @param [in] bgcolour Background colour of barcode * @return BARCODE_ERROR_NONE from BarcodeError which is 0 if success, * BarcodeError value otherwise */ @@ -63,7 +65,9 @@ public: BarcodeQREncodingMode encodingMode = BARCODE_QR_MODE_UNAVAILABLE, BarcodeQRErrorCorrectionLevel correctionLevel = BARCODE_QR_ECC_UNAVAILABLE, int qrVersion = 0, - int showText = 0); + int showText = 0, + char *fgcolour = NULL, + char *bgcolur = NULL); /** * @brief This method generates Barcodes image buffer according to options. @@ -79,6 +83,8 @@ public: * @param [in] correctionLevel Error correction level (for QR codes only) * @param [in] qrVersion QR code version (1 ~ 40, 0 for 1D barcodes) * @param [in] showText Show text or not + * @param [in] fgcolour Foreground colour of barcode + * @param [in] bgcolour Background colour of barcode * @return BARCODE_ERROR_NONE from BarcodeError which is 0 if success, * BarcodeError value otherwise */ @@ -92,7 +98,9 @@ public: BarcodeQREncodingMode encodingMode = BARCODE_QR_MODE_UNAVAILABLE, BarcodeQRErrorCorrectionLevel correctionLevel = BARCODE_QR_ECC_UNAVAILABLE, int qrVersion = 0, - int showText = 0); + int showText = 0, + char *fgcolour = NULL, + char *bgcolur = NULL); }; } /* Barcode */ diff --git a/mv_barcode/barcode_generator/src/BarcodeGenerator.cpp b/mv_barcode/barcode_generator/src/BarcodeGenerator.cpp index 522f65f0..09d33a35 100644 --- a/mv_barcode/barcode_generator/src/BarcodeGenerator.cpp +++ b/mv_barcode/barcode_generator/src/BarcodeGenerator.cpp @@ -70,6 +70,8 @@ int createBarcode( BarcodeQRErrorCorrectionLevel correctionLevel, int qrVersion, int showText, + char *fgcolour, + char *bgcolour, zint_symbol *symbol) { /* set input values */ @@ -81,8 +83,26 @@ int createBarcode( symbol->show_hrt = showText; /* set default values */ - std::strncpy(symbol->fgcolour, "000000", 10); - std::strncpy(symbol->bgcolour, "ffffff", 10); + if (fgcolour) { + std::strncpy(symbol->fgcolour, fgcolour, 10); + if (strlen(fgcolour) > 9) { + symbol->fgcolour[9] = '\0'; + } + } else { + std::strncpy(symbol->fgcolour, "000000", 10); + } + + if (bgcolour) { + std::strncpy(symbol->bgcolour, bgcolour, 10); + if (strlen(fgcolour) > 9) { + symbol->fgcolour[9] = '\0'; + } + } else { + std::strncpy(symbol->bgcolour, "ffffff", 10); + } + + LOGI("Check colors: front %s, back %s", symbol->fgcolour, symbol->bgcolour); + symbol->border_width = 1; symbol->height = 50; @@ -190,7 +210,9 @@ int BarcodeGenerator::generateBarcodeToImage( BarcodeQREncodingMode encodingMode, BarcodeQRErrorCorrectionLevel correctionLevel, int qrVersion, - int showText) + int showText, + char *fgcolour, + char *bgcolour) { zint_symbol *symbol = ZBarcode_Create(); @@ -206,6 +228,8 @@ int BarcodeGenerator::generateBarcodeToImage( correctionLevel, qrVersion, showText, + fgcolour, + bgcolour, symbol); if (error != BARCODE_ERROR_NONE) { @@ -241,7 +265,9 @@ int BarcodeGenerator::generateBarcodeToBuffer( BarcodeQREncodingMode encodingMode, BarcodeQRErrorCorrectionLevel correctionLevel, int qrVersion, - int showText) + int showText, + char *fgcolour, + char *bgcolour) { zint_symbol *symbol = ZBarcode_Create(); @@ -258,6 +284,8 @@ int BarcodeGenerator::generateBarcodeToBuffer( correctionLevel, qrVersion, showText, + fgcolour, + bgcolour, symbol); if (error != BARCODE_ERROR_NONE) { diff --git a/mv_barcode/barcode_generator/src/mv_barcode_generate_open.cpp b/mv_barcode/barcode_generator/src/mv_barcode_generate_open.cpp index 444ceb3a..558300bd 100644 --- a/mv_barcode/barcode_generator/src/mv_barcode_generate_open.cpp +++ b/mv_barcode/barcode_generator/src/mv_barcode_generate_open.cpp @@ -221,17 +221,71 @@ int mv_barcode_generate_source_open( unsigned int imageChannels = 0u; int showText = 0; - error = mv_engine_config_get_int_attribute(engine_cfg, "MV_BARCODE_GENERATE_ATTR_TEXT", &showText); - if (error != MEDIA_VISION_ERROR_NONE) { - LOGW("mv_engine_config_get_int_attribute failed"); - return error; - } + char value; + char *fgcolour = NULL; + char *bgcolour = NULL; + + if (engine_cfg != NULL) { + error = mv_engine_config_get_int_attribute(engine_cfg, "MV_BARCODE_GENERATE_ATTR_TEXT", &showText); + if (error != MEDIA_VISION_ERROR_NONE) { + LOGW("mv_engine_config_get_int_attribute failed"); + return error; + } + + if (showText == BARCODE_GEN_TEXT_VISIBLE && type == MV_BARCODE_QR) { + LOGW("QR code generation with visible text is not supported"); + return MEDIA_VISION_ERROR_INVALID_OPERATION; + } + + /* set color value */ + error = mv_engine_config_get_string_attribute(engine_cfg, "MV_BARCODE_GENERATE_ATTR_COLOR_FRONT", &fgcolour); + if (error != MEDIA_VISION_ERROR_NONE) { + if (fgcolour) { + delete [] fgcolour; + fgcolour = NULL; + } - if (showText == BARCODE_GEN_TEXT_VISIBLE && type == MV_BARCODE_QR) { - LOGW("QR code generation with visible text is not supported"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; + LOGW("mv_engine_config_get_string_attribute failed"); + return error; + } + + error = mv_engine_config_get_string_attribute(engine_cfg, "MV_BARCODE_GENERATE_ATTR_COLOR_BACK", &bgcolour); + if (error != MEDIA_VISION_ERROR_NONE) { + if (bgcolour) { + delete [] bgcolour; + bgcolour = NULL; + } + + if (fgcolour) { + delete [] fgcolour; + fgcolour = NULL; + } + + LOGW("mv_engine_config_get_string_attribute failed"); + return error; + } } + /* + The input colorspace is RGB but the generators' is BGR. + Replace the value of R with that of B + */ + value = fgcolour[0]; + fgcolour[0] = fgcolour[4]; + fgcolour[4] = value; + + value = fgcolour[1]; + fgcolour[1] = fgcolour[5]; + fgcolour[5] = value; + + value = bgcolour[0]; + bgcolour[0] = bgcolour[4]; + bgcolour[4] = value; + + value = bgcolour[1]; + bgcolour[1] = bgcolour[5]; + bgcolour[5] = value; + error = BarcodeGenerator::generateBarcodeToBuffer( &imageBuffer, &imageWidth, @@ -242,7 +296,19 @@ int mv_barcode_generate_source_open( convertEncodingMode(qr_enc_mode), convertECC(qr_ecc), qr_version, - showText); + showText, + fgcolour, + bgcolour); + + if (fgcolour != NULL) { + delete [] fgcolour; + fgcolour = NULL; + } + + if (bgcolour != NULL) { + delete [] bgcolour; + bgcolour = NULL; + } if (error != BARCODE_ERROR_NONE) { LOGE("Barcode generation to the buffer failed"); @@ -316,8 +382,12 @@ int mv_barcode_generate_image_open( } int showText = 0; + char value; + char *fgcolour = NULL; + char *bgcolour = NULL; if (engine_cfg != NULL) { + /* set visible text attribute */ error = mv_engine_config_get_int_attribute(engine_cfg, "MV_BARCODE_GENERATE_ATTR_TEXT", &showText); if (error != MEDIA_VISION_ERROR_NONE) { LOGW("mv_engine_config_get_int_attribute failed"); @@ -328,8 +398,56 @@ int mv_barcode_generate_image_open( LOGW("QR code generation with visible text is not supported"); return MEDIA_VISION_ERROR_INVALID_OPERATION; } + + /* set color value */ + error = mv_engine_config_get_string_attribute(engine_cfg, "MV_BARCODE_GENERATE_ATTR_COLOR_FRONT", &fgcolour); + if (error != MEDIA_VISION_ERROR_NONE) { + if (fgcolour) { + delete [] fgcolour; + fgcolour = NULL; + } + + LOGW("mv_engine_config_get_string_attribute failed"); + return error; + } + + error = mv_engine_config_get_string_attribute(engine_cfg, "MV_BARCODE_GENERATE_ATTR_COLOR_BACK", &bgcolour); + if (error != MEDIA_VISION_ERROR_NONE) { + if (bgcolour) { + delete [] bgcolour; + bgcolour = NULL; + } + + if (fgcolour) { + delete [] fgcolour; + fgcolour = NULL; + } + + LOGW("mv_engine_config_get_string_attribute failed"); + return error; + } } + /* + The input colorspace is RGB but the generators' is BGR. + Replace the value of R with that of B + */ + value = fgcolour[0]; + fgcolour[0] = fgcolour[4]; + fgcolour[4] = value; + + value = fgcolour[1]; + fgcolour[1] = fgcolour[5]; + fgcolour[5] = value; + + value = bgcolour[0]; + bgcolour[0] = bgcolour[4]; + bgcolour[4] = value; + + value = bgcolour[1]; + bgcolour[1] = bgcolour[5]; + bgcolour[5] = value; + error = BarcodeGenerator::generateBarcodeToImage( std::string(image_path), convertImageFormat(image_format), @@ -340,7 +458,19 @@ int mv_barcode_generate_image_open( convertEncodingMode(qr_enc_mode), convertECC(qr_ecc), qr_version, - showText); + showText, + fgcolour, + bgcolour); + + if (fgcolour != NULL) { + delete [] fgcolour; + fgcolour = NULL; + } + + if (bgcolour != NULL) { + delete [] bgcolour; + bgcolour = NULL; + } if (error != BARCODE_ERROR_NONE) { LOGE("Barcode generation to the image file failed"); |