Получите соотношение размеров изображения Emf (Win32, C / C ++) - PullRequest
0 голосов
/ 05 марта 2019

Я хочу конвертировать файл векторного изображения .emf в .bmp, используя API Win32 и C / C ++.

Работает с квадратным изображением. Но я не знаю, как получить соотношение размера изображения .emf, когда оно прямоугольное.

Структура ENHMETAHEADER, заполненная функцией GetEnhMetaFileHeader (), похоже, не содержит правильной информации. rclBounds и rclFrame структуры ENHMETAHEADER дают эквивалентную ширину и высоту, в то время как мое изображение .emf явно прямоугольное (высота должна быть почти в два раза больше ширины с моим тестовым изображением).

Как я могу получить это соотношение? как софт вроде irfanview это сделал?

Вот код, который я использую, чтобы получить ширину изображения и высоту:

BOOL CConvertEMFToBMP::ConvertToBMP(const char* strFileName, const char* strBMPFile, int w, int h, int div, int indexX, int indexY)
{
    HENHMETAFILE    hemf;
    HBITMAP         bitmap;
    HDC             memDC;
    ENHMETAHEADER   emh;

    HDC dc = ::GetDC(NULL);

    hemf = ::GetEnhMetaFileA(strFileName);

    ZeroMemory(&emh, sizeof(ENHMETAHEADER));
    emh.nSize = sizeof(ENHMETAHEADER);
    if (GetEnhMetaFileHeader(hemf, sizeof(ENHMETAHEADER), &emh) == 0)
    {
        DeleteEnhMetaFile(hemf);
        printf("Error: Can't get EnhMetaFileHeader\n");
        return FALSE;
    }

    long frameWidth  = emh.rclFrame.right  - emh.rclFrame.left;
    long frameHeight = emh.rclFrame.bottom - emh.rclFrame.top;

    RECT rect;
    long width = emh.rclBounds.right - emh.rclBounds.left;
    long height = emh.rclBounds.bottom - emh.rclBounds.top;

...
}

С моим изображением .emf: Под IrfanView: Оригинальный размер: 38208 x 52340 пикселей (1999,81 мегапикселей) (1,37) Текущий размер: 19104 x 26170 пикселей (499,95 МП) (1,37)

Используя мой код: ширина = 165091 высота = 165069

Но для некоторого изображения это работает ... Пример с другим изображением:

Под IrfanView: Оригинальный размер: 9921 x 14030 пикселей (139,19 мкс) (1,41) Текущий размер: 9921 x 14030 пикселей (139,19 мкс) (1,41)

Используя мой код: ширина = 9920 высота = 14030

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...