diff --git a/modules/imgfmt/HGOfdImpl.cpp b/modules/imgfmt/HGOfdImpl.cpp index 2f4a035b..7dbc4d4c 100644 --- a/modules/imgfmt/HGOfdImpl.cpp +++ b/modules/imgfmt/HGOfdImpl.cpp @@ -487,10 +487,26 @@ HGResult HGOfdImageWriterImpl::SaveJpegImage(HGImage image, const HGJpegSaveInfo return HGBASE_ERR_FAIL; } + HGUInt xDpi, yDpi; + HGBase_GetImageDpi(image, &xDpi, &yDpi); + if (NULL != info) + { + if (HGIMGFMT_JPEGDENUNIT_INCH == info->densityUnit) + { + xDpi = info->xDensity; + yDpi = info->yDensity; + } + else if (HGIMGFMT_JPEGDENUNIT_CENTIMETER == info->densityUnit) + { + xDpi = (uint32_t)((double)info->xDensity / 0.393700787 + 0.5); + yDpi = (uint32_t)((double)info->yDensity / 0.393700787 + 0.5); + } + } + HGImageInfo imgInfo; HGBase_GetImageInfo(image, &imgInfo); - HGFloat physicalWidth = 25.4f * (HGFloat)imgInfo.width / 96.0f; - HGFloat physicalHeight = 25.4f * (HGFloat)imgInfo.height / 96.0f; + HGFloat physicalWidth = 25.4f * (HGFloat)imgInfo.width / (HGFloat)xDpi; + HGFloat physicalHeight = 25.4f * (HGFloat)imgInfo.height / (HGFloat)yDpi; AddContentXmlFile(m_curImgIndex, physicalWidth, physicalHeight); ++m_curImgIndex;