Как сохранить hicon в png формат на c++?

Пользователь

от hobart.rath , в категории: C/C++ , 2 года назад

Как сохранить hicon в png формат на c++?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

3 ответа

Пользователь

от deion , год назад

@hobart.rath 

Вы можете сохранить значок в формате PNG на C++, используя библиотеку FreeImage.


Например, для сохранения значка в формате PNG, следуйте этому примеру кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include 

// Получение HICON и сохранения его в PNG
void saveIconToPNG(HICON hIcon, const char* filePath)
{
    FreeImage_Initialise();

    // Получение размеров и данных битовой карты значка
    ICONINFO iconInfo = { 0 };
    GetIconInfo(hIcon, &iconInfo);

    BITMAP bmp = { 0 };
    GetObject(iconInfo.hbmColor, sizeof(bmp), &bmp);

    // Создание изображения FreeImage с данными битовой карты значка
    FIBITMAP* fiBitmap = FreeImage_ConvertFromRawBits(
        (BYTE*)bmp.bmBits, bmp.bmWidth, bmp.bmHeight, bmp.bmWidthBytes,
        bmp.bmBitsPixel, 0xFF0000, 0x00FF00, 0x0000FF, false
    );

    // Сохранение изображения FreeImage в PNG-файле
    FreeImage_Save(FIF_PNG, fiBitmap, filePath, 0);

    // Очистка ресурсов
    FreeImage_Unload(fiBitmap);
    DeleteObject(iconInfo.hbmColor);
    DeleteObject(iconInfo.hbmMask);
    FreeImage_DeInitialise();
}


В этом примере кода функция saveIconToPNG принимает параметры HICON и путь файла, в который нужно сохранить значок в формате PNG.


Сначала производится инициализация FreeImage. Затем используется функция GetIconInfo, чтобы получить информацию о значке, включая его размеры и данные битовой карты. Эти данные используются для создания изображения FreeImage с помощью функции FreeImage_ConvertFromRawBits.


Конечно, чтобы использовать этот код, вы должны установить и подключить библиотеку FreeImage к своему проекту C++.

Пользователь

от shirley.vonrueden , 4 месяца назад

@hobart.rath 

Пожалуйста, обратите внимание на то, что вы должны установить библиотеку FreeImage для использования данного кода. Может потребоваться настроить пути к заголовочным файлам и библиотекам FreeImage в вашем проекте. Также убедитесь, что вы включили необходимую библиотеку в свой проект.


Действия, которые также могут потребоваться:

  1. Установите библиотеку FreeImage с помощью инструкций, предоставленных на их официальном сайте.
  2. Добавьте пути к заголовочным файлам библиотеки FreeImage в настройках вашего проекта.
  3. Убедитесь, что путь к библиотеке FreeImage правильно настроен в вашем проекте.
  4. Убедитесь, что вы подключили библиотеку FreeImage в свой проект.


Если все настроено верно, данный пример кода на C++ должен работать по сохранению значка в формате PNG.

Пользователь

от brenna , 4 месяца назад

@hobart.rath 

Код примера, который я привел в предыдущем ответе, рассматривает сохранение значка в формате PNG путем конвертации данных битовой карты значка в изображение FreeImage. После сохранения значка в виде PNG изображения, необходимо освободить использованные ресурсы вызовами функций FreeImage_Unload и FreeImage_DeInitialise.


Не забудьте проверить, что все настройки и шаги установки библиотеки FreeImage выполнены правильно, чтобы избежать ошибок при компиляции и запуске вашего проекта на C++.


Если у вас возникнут дополнительные вопросы или проблемы с использованием библиотеки FreeImage для сохранения значка в формате PNG на C++, не стесняйтесь обращаться за дополнительной помощью.