Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 07.11.2017
Сообщений: 34
1

Как извлечь файл(битмап) из ресурсов программы?

13.07.2018, 18:13. Показов 3013. Ответов 4

Author24 — интернет-сервис помощи студентам
Пишу на Visual Studio 2017
Имеется .jpg файл хранимый в ресурсах, после компиляции видно что он сидит в программе, её размер увеличился.
Как теперь её вытащить, например распаковать её в папку с программой при запуске?
Миниатюры
Как извлечь файл(битмап) из ресурсов программы?  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.07.2018, 18:13
Ответы с готовыми решениями:

Как извлечь исполняемый файл из ресурсов?
В файле ресурсов resX есть исполняемый файл, как его извлечь??

Как извлечь программно файл из ресурсов Nsf
Доброго времени суток, коллеги! Если кто-нибудь знает, как можно извлечь на диск файл из...

Извлечь файл из ресурсов
Как можно извлечь файл из ресурсов в путь прописаный в textBox1? Файл .amc

Извлечь изображение из ресурсов программы в папку с этой программой
Всем доброго времени суток.Подскажите как извлечь изображение(в формате .png) из ресурсов программы...

4
7787 / 6555 / 2983
Регистрация: 14.04.2014
Сообщений: 28,633
13.07.2018, 18:22 2
Это вопрос по WinAPI.
0
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
14.07.2018, 04:22 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
std::vector<uint8_t> loadFromResources(int IDD_RESOUCE, std::wstring type)
{
    HMODULE hModule = GetModuleHandle(NULL);
    HRSRC hResInfo = FindResourceW(hModule, MAKEINTRESOURCEW(IDD_RESOUCE), type.c_str());
 
    if (hResInfo != NULL)
    {
        HGLOBAL hResData = LoadResource(hModule, hResInfo);
        if (hResData != NULL)
        {
            byte* pvRes = (byte*)LockResource(hResData);
            if (pvRes != NULL)
            {
                DWORD dwSize = SizeofResource(hModule, hResInfo);
                std::vector<uint8_t> data(pvRes, pvRes + dwSize);
                FreeResource(hResData);
                return data;
            }
        }
    }
 
    return 0;
}
Дальше адаптируйте под себя
0
838 / 641 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
14.07.2018, 06:05 4
Лучший ответ Сообщение было отмечено Ahri9Fox как решение

Решение

Цитата Сообщение от Ahri9Fox Посмотреть сообщение
Как теперь её вытащить, например распаковать её в папку с программой при запуске?
C++
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <windows.h>
#include <stdio.h>
#include "resource.h"
 
DWORD ResourceToFile(LPCTSTR filename, HMODULE hinst, UINT id, LPCTSTR type){
    BOOL    r;
    DWORD   n, size;
    LPBYTE  buf;
    HGLOBAL data;
    HANDLE  fp;
    DWORD   ret = NO_ERROR;
    HRSRC   res = FindResource(hinst, MAKEINTRESOURCE(id), type);
    if(res == NULL)
        return GetLastError();
 
    data = LoadResource(hinst, res);
    if(data == NULL)
        return GetLastError();
 
    buf = (LPBYTE)LockResource(data);
    if(buf != NULL){
        size = SizeofResource(hinst, res);
 
        fp   = CreateFile(filename, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, 
                          CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        if(fp != INVALID_HANDLE_VALUE){
 
            r = WriteFile(fp, buf, size, &n, NULL);
            if(r && size == n)
                FlushFileBuffers(fp);
            else
                ret = GetLastError();
            CloseHandle(fp);
 
        } else
            ret = GetLastError();
 
        UnlockResource(data);
    } else
        ret = GetLastError();
 
    FreeResource(data);
    return ret;
}
 
int main(void){
    DWORD ret = ResourceToFile(TEXT("image.jpg"), GetModuleHandle(NULL), IDR_JPG1, TEXT("JPG"));
    if(ret != NO_ERROR)
        printf("Error, code: %lu\n", ret);
    getchar();
    return 0;
}
1
9 / 9 / 2
Регистрация: 09.04.2012
Сообщений: 75
14.07.2018, 19:41 5
Воспользуйтесь фунцией
HBITMAP LoadBitmap(
HINSTANCE hInstance, // handle of application instance
LPCTSTR lpBitmapName // address of bitmap resource name
);

Во втором параметре укажите в кавычках идентификатор битмэпа в ресурсах программы.
Так вы загрузите битмэп, и можно его потом вывести на экран функцией ImageList_Draw()
0
14.07.2018, 19:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.07.2018, 19:41
Помогаю со студенческими работами здесь

Извлечь файл из ресурсов в WPF приложении
Народ, помогите, как мне извлечь файл из ресурсов? Я пробовал так, но не пашет, точнее копирует, но...

Нужно извлечь звуковой файл из ресурсов
Нужно извлечь звуковой файл (Sound1.wav), который вшит в ресурсы программы. Хотел реализовать...

Извлечь файл из ресурсов в папку приложения
Во внедренные ресурсы добавил файл 1.xlxs. Если при запуске программы, рядом с exe нету файла, то...

Извлечь из ресурсов exe-файл на диск
Вобщем не обходимо в файл ресурсов загружать файлы *.exe и выгружать в папку как готовый файл exe...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru