Changes the resolution of an existing Enhanced Metafile (EMF).
#include "l_bitmap.h"
L_LTDOCWRT_API L_INT EXT_FUNCTION L_DocWriterUpdateMetaFileResolution (hEmfSrc, xResolution, yResolution, phEmfDest)
Handle to the Enhanced Metafile (EMF) to be updated.
The new X Resolution value. 0 means do not change this resolution.
The new Y Resolution value. 0 means do not change this resolution.
Address of an Enhanced Metafile (EMF) handle that will be updated with the modified EMF.
Value | Meaning |
---|---|
SUCCESS | The function was successful. |
< 1 | An error occurred. Refer to Return Codes. |
A value of 0 for xResolution
or yResolution
means do not change this resolution value. This allows you to only change the horizontal or the vertical resolution of an Enhanced Metafile (EMF) handle without affecting the other resolution.
If either xResolution or yResolution is equal to -1, then the aspect ratio for the original EMF handle will be maintained and the positive value for either xResolution or yResolution will be used as the resolution (DPI) value for the modified EMF handle. Note that xResolution and yResolution cannot both be less than zero.
Win32, x64.
static void ShowMetaFileDimension(HENHMETAFILE hEmf)
{
// Get the metafile header
L_UINT uSize = GetEnhMetaFileHeader(hEmf, 0, NULL);
L_VOID* ptr = malloc(uSize);
ENHMETAHEADER* pHeader = reinterpret_cast<ENHMETAHEADER*>(ptr);
L_TCHAR szBuffer[_MAX_PATH];
wsprintf(szBuffer, "Meta Information. Size: %d by %d pixels\n", pHeader->rclBounds.right - pHeader->rclBounds.left, pHeader->rclBounds.bottom - pHeader->rclBounds.top);
_tprintf(_T("%s"), szBuffer);
// The resolution is saved in 0.01 mm units, convert to dots/inch
L_INT xResolution = (L_INT)((L_DOUBLE)pHeader->szlDevice.cx * 25.4 / (L_DOUBLE)pHeader->szlMillimeters.cx + 0.5);
L_INT yResolution = (L_INT)((L_DOUBLE)pHeader->szlDevice.cy * 25.4 / (L_DOUBLE)pHeader->szlMillimeters.cy + 0.5);
wsprintf(szBuffer, "Meta Information. Resolution: %d by %d pixels/inch\n", xResolution, yResolution);
_tprintf(_T("%s"), szBuffer);
free(ptr);
}
L_INT L_DocWriterUpdateMetaFileResolutionExample(L_VOID)
{
// Load the original meta file
L_HENHMETAFILE hEmf = GetEnhMetaFile(MAKE_IMAGE_PATH("Ocr1.emf"));
// Show the dimension
L_TCHAR szBuffer[_MAX_PATH];
wsprintf(szBuffer, "Meta Information: Original EMF dimension:\n");
_tprintf(_T("%s"), szBuffer);
ShowMetaFileDimension(hEmf);
// Change the resolution to be 200 by 200 dots/inch
L_HENHMETAFILE hEmfDest = NULL;
L_INT nRet = L_DocWriterUpdateMetaFileResolution(hEmf, 600, 600, &hEmfDest);
// No need for the original handle anymore
DeleteEnhMetaFile(hEmf);
if (nRet == SUCCESS)
{
wsprintf(szBuffer, "Meta Information: New EMF dimension:\n");
_tprintf(_T("%s"), szBuffer);
ShowMetaFileDimension(hEmfDest);
DeleteEnhMetaFile(hEmfDest);
}
return SUCCESS;
}
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document