diff --git a/hgdriver/3rdparty/opencv/include/win/opencv2/imgcodecs/imgcodecs_c.h b/hgdriver/3rdparty/opencv/include/win/opencv2/imgcodecs/imgcodecs_c.h index c36dac3..e821999 100644 --- a/hgdriver/3rdparty/opencv/include/win/opencv2/imgcodecs/imgcodecs_c.h +++ b/hgdriver/3rdparty/opencv/include/win/opencv2/imgcodecs/imgcodecs_c.h @@ -85,6 +85,13 @@ enum CV_IMWRITE_JPEG_RST_INTERVAL =4, CV_IMWRITE_JPEG_LUMA_QUALITY =5, CV_IMWRITE_JPEG_CHROMA_QUALITY =6, + + // add for DPI on 2022-10-14 + CV_IMWRITE_JPEG_RESOLUTION_UNIT = 7, // 0 - unknown(default value), 1 - dots/inch, 2 - dots/cm + CV_IMWRITE_JPEG_RESOLUTION_X = 8, // default value - 1 + CV_IMWRITE_JPEG_RESOLUTION_Y = 9, // default value - 1 + // ENDED for DPI + CV_IMWRITE_PNG_COMPRESSION =16, CV_IMWRITE_PNG_STRATEGY =17, CV_IMWRITE_PNG_BILEVEL =18, diff --git a/hgdriver/hgdev/image_process.cpp b/hgdriver/hgdev/image_process.cpp index 773af57..69febc6 100644 --- a/hgdriver/hgdev/image_process.cpp +++ b/hgdriver/hgdev/image_process.cpp @@ -1399,8 +1399,16 @@ namespace hg_imgproc // MSB word[7] and word[8] are x and y resolutions std::vector cpr; unsigned short jpeg_r = (resolution << 8) | ((resolution >> 8) & 0x0ff); + int resolution_y = bih.biYPelsPerMeter / 39.37f + .5f; + cpr.push_back(CV_IMWRITE_JPEG_QUALITY); cpr.push_back((int)(long)conv->dst.fmt.detail); + cpr.push_back(CV_IMWRITE_JPEG_RESOLUTION_UNIT); + cpr.push_back(1); + cpr.push_back(CV_IMWRITE_JPEG_RESOLUTION_X); + cpr.push_back(resolution); + cpr.push_back(CV_IMWRITE_JPEG_RESOLUTION_Y); + cpr.push_back(resolution_y); if (conv->dst.is_file) { cv::imwrite(conv->dst.data, imsg, cpr);