summaryrefslogtreecommitdiff
path: root/mv_barcode
diff options
context:
space:
mode:
authorTae-Young Chung <ty83.chung@samsung.com>2016-04-06 17:33:08 +0900
committerTae-Young Chung <ty83.chung@samsung.com>2016-04-19 08:59:24 +0900
commitd1e0940087db9cf006aa9ce7a3c6e47a02c048cb (patch)
tree030718db1d0903fb7f82e12fab68ffa45cc123b6 /mv_barcode
parent901c93be027012ea1c52fc1ce09d33639a99ada4 (diff)
downloadmediavision-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')
-rw-r--r--mv_barcode/barcode_generator/include/BarcodeGenerator.h12
-rw-r--r--mv_barcode/barcode_generator/src/BarcodeGenerator.cpp36
-rw-r--r--mv_barcode/barcode_generator/src/mv_barcode_generate_open.cpp150
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");