return cv::Scalar((color_decimal >> 16) & 0xff, (color_decimal >> 8) & 0xff, color_decimal & 0xff);
}
-/*
- * Use only for mv_barcode_generate_image because,
- * QR code size is maximum 177x177, then logo will be (35x35).
- * mv_barcode_generate_image support user-defined resize, so user can set size detail.
- */
-static void __draw_logo(cv::Mat &image, const BarcodeConfig &config)
+static cv::Size makeEven(cv::Size orgSize)
+{
+ cv::Size size(orgSize);
+ size.width += size.width & 1;
+ size.height += size.height & 1;
+ return size;
+}
+
+static void drawLogo(cv::Mat &image, const BarcodeConfig &config)
{
if (config.logo_path.empty() || config.type != MV_BARCODE_QR)
return;
auto color_frame = convert_to_scalar(config.bgcolor);
auto color_white = cv::Scalar(255, 255, 255);
- auto logoSize = image.size() / 5;
- auto logoFrameSize = logoSize + logoSize / 10;
+ auto logoSize = makeEven(image.size() / 5);
+ auto logoFrameSize = makeEven(logoSize + logoSize / 10);
cv::resize(logo, logo, logoSize);
cv::Mat maskMat = cv::Mat::zeros(image.size(), image.type());
cv::Mat image;
cv::resize(buf, image, cv::Size(config.image_width, config.image_height), 0, 0, cv::INTER_AREA);
- __draw_logo(image, config);
-
error = cv::imwrite(resultFilePath, image, compressionParams) ? BARCODE_ERROR_NONE : BARCODE_ERROR_INVALID_DATA;
if (BARCODE_ERROR_NONE != error) {
try {
drawDesignQR(buf, config);
changeColor(buf, config);
+ drawLogo(buf, config);
+
} catch (const std::exception &e) {
LOGE("Exception: %s", e.what());
return MEDIA_VISION_ERROR_INTERNAL;