С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/112: Рейтинг темы: голосов - 112, средняя оценка - 4.54
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033

Загрузка изображения bmp из ресурсов

13.03.2012, 20:07. Показов 21726. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
господа я поднимал конечно уже тему,заранее прошу прощение за нарушение правил,но там было не совсем то , что мне надо.А надо мне загрузить изображение при помощи LoadImage и отресовать при помощи функции DrawBitmap,вот как я пытаюсь загрузить из ресурсов(компилятор не ругается но и картинку не показывает).
cpp
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include <windows.h>
#include"main.h"
/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
 
/*  Make the class name into a global variable  */
char szClassName[ ] = "WindowsApp";
void DrawBitmap(HDC hDC, int x, int y, HBITMAP hBitmap);
HINSTANCE hInstance;
int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)
 
{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */
 
    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);
 
    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
 
    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;
 
    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );
 
    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);
 
    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }
 
    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}
 
 
/*  This function is called by the Windows function DispatchMessage()  */
 
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        static HBITMAP hBitmap;
        HDC hdc;
        PAINTSTRUCT ps;
    switch (message)                  /* handle the messages */
    {
           case WM_CREATE:
hBitmap = (HBITMAP)LoadImageA(hInstance, MAKEINTRESOURCEA(IDB_BITMAP1),IMAGE_BITMAP, 100, 100, LR_DEFAULTCOLOR);
                 break;
                 case WM_PAINT:
                hdc=BeginPaint(hwnd,&ps);
                DrawBitmap(hdc, 0,0,hBitmap);
                EndPaint(hwnd,&ps);
                break;
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
 
    return 0;
}
void DrawBitmap(HDC hdc, int x, int y, HBITMAP hBitmap)
{
        HBITMAP hbm, hOldbm;
        HDC hMemDC;
        BITMAP bm;
        POINT ptSize, ptOrg;
 
        // Ñîçäàåì êîíòåêñò ïàìÿòè, ñîâìåñòèìûé
        // ñ êîíòåêñòîì îòîáðàæåíèÿ
        hMemDC = CreateCompatibleDC(hdc);
 
        // Âûáèðàåì èçîáðàæåíèå bitmap â êîíòåêñò ïàìÿòè
        hOldbm = (HBITMAP)SelectObject(hMemDC, hBitmap);
 
        // Åñëè íå áûëî îøèáîê, ïðîäîëæàåì ðàáîòó
        if (hOldbm)
        {
                // Äëÿ êîíòåêñòà ïàìÿòè óñòàíàâëèâàåì òîò æå
                // ðåæèì îòîáðàæåíèÿ, ÷òî èñïîëüçóåòñÿ â
                // êîíòåêñòå îòîáðàæåíèÿ
                SetMapMode(hMemDC, GetMapMode(hdc));
 
                // Îïðåäåëÿåì ðàçìåðû èçîáðàæåíèÿ
                GetObject(hBitmap, sizeof(BITMAP), (LPSTR) &bm);
 
                ptSize.x = bm.bmWidth;  // øèðèíà
                ptSize.y = bm.bmHeight; // âûñîòà
 
                // Ïðåîáðàçóåì êîîðäèíàòû óñòðîéñòâà â ëîãè÷åñêèå
                // äëÿ óñòðîéñòâà âûâîäà
                DPtoLP(hdc, &ptSize, 1);
 
                ptOrg.x = 0;
                ptOrg.y = 0;
 
                // Ïðåîáðàçóåì êîîðäèíàòû óñòðîéñòâà â ëîãè÷åñêèå
                // äëÿ êîíòåêñòà ïàìÿòè
                DPtoLP(hMemDC, &ptOrg, 1);
 
                // Ðèñóåì èçîáðàæåíèå bitmap
                BitBlt(hdc, x, y, ptSize.x, ptSize.y,
                        hMemDC, ptOrg.x, ptOrg.y, SRCCOPY);
 
                // Âîññòàíàâëèâàåì êîíòåêñò ïàìÿòè
                SelectObject(hMemDC, hOldbm);
        }
 
        // Óäàëÿåì êîíòåêñò ïàìÿòè
        DeleteDC(hMemDC);
}
main.h
C++
1
#define IDB_BITMAP1                     102
rsrc.rc
C++
1
IDB_BITMAP1             BITMAP  DISCARDABLE     "1.bmp"
Добавлено через 21 час 43 минуты
я проверял функция "LoadImageA" завершает работу нулём,но вот не понятно,почему он не может загрузить из рессурсов,уже всё перерыл не как не могу,если кому то известна информация поделитесь пожалуйста!!!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.03.2012, 20:07
Ответы с готовыми решениями:

C++ Win32 Console Загрузка и поворот изображения с расширением *bmp
Всем добрый день! Возник такой вопрос: Необходимо написать программу, которая читает с диска *.bmp файл и выводит его в окно...

ListView загрузка изображения (jpg, png, bmp)
Всем привет! Всех с праздником! Есть код: FMX procedure TForm1.Button1Click(Sender: TObject); var

Загрузка изображения из ресурсов в Image WPF
Ну никак не получается загрузить изображения из ресурса, всегда ошибка. Уже все что нашел в интернете проверил... Build Action -...

27
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,307
30.05.2013, 20:33
Студворк — интернет-сервис помощи студентам
Спасибо -=ЮрА=- все работает!!!!!
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
02.06.2013, 02:53
Неужели и как долго?
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
02.06.2013, 18:12
Цитата Сообщение от Digit@ll Посмотреть сообщение
Проект надо полностью переписывать.
- да 2 строки заменить надо.
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
// APILoadImg.cpp : Defines the entry point for the application.
//
 
#include "stdafx.h"
#include "resource.h"
 
// Global Variables:
HINSTANCE hInst;    // current instance
// Foward declarations of functions included in this code module:
LRESULT CALLBACK    DlgProc(HWND, UINT, WPARAM, LPARAM);
void DrawBitmap(HDC hdc, int x, int y, HBITMAP hBitmap);
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    // TODO: Place code here.
    DialogBox((hInst = hInstance), (LPCTSTR)IDD_DIALOG, NULL, (DLGPROC)DlgProc);
    MSG msg;
    // Main message loop:
    while (GetMessage(&msg, NULL, 0, 0)) 
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return msg.wParam;
}
 
LRESULT CALLBACK DlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hDC   = NULL;
    BOOL bRet = FALSE;
    BOOL bCmd = FALSE;
    HBITMAP bm= NULL;
    PAINTSTRUCT ps;
    switch (message) 
    {
        case WM_INITDIALOG:
            bRet = TRUE;
            break;
        case WM_COMMAND:
            bRet = TRUE;
            bCmd = TRUE;
            break;
        case WM_PAINT:
            if(hDC = BeginPaint(hWnd, &ps))
            {
                if( bm )
                    DeleteObject(bm);
                bm = (HBITMAP)LoadImage
                (
                    hInst,
                    MAKEINTRESOURCE(IDB_BITMAP),
                    IMAGE_BITMAP,
                    ps.rcPaint.right - ps.rcPaint.left,
                    ps.rcPaint.bottom - ps.rcPaint.top,
                    LR_COPYFROMRESOURCE
                );
                DrawBitmap(hDC, 0, 0, bm);
                EndPaint(hWnd, &ps);
            }
            else
                MessageBox(hWnd,"Error GetDC",NULL,MB_OK);
            bRet = TRUE;
            break;
        case WM_DESTROY:
        case WM_CLOSE:
            EndDialog(hWnd, LOWORD(wParam));
            PostQuitMessage(0);
            break;
    }
    return bRet;
}
 
void DrawBitmap(HDC hdc, int x, int y, HBITMAP hBitmap)
{
        HBITMAP hbm, hOldbm;
        HDC hMemDC;
        BITMAP bm;
        POINT ptSize, ptOrg;
 
        // Создаем контекст памяти, совместимый
        // с контекстом отображения
        hMemDC = CreateCompatibleDC(hdc);
 
        // Выбираем изображение bitmap в контекст памяти
        hOldbm = (HBITMAP)SelectObject(hMemDC, hBitmap);
 
        // Если не было ошибок, продолжаем работу
        if (hOldbm)
        {
                // Для контекста памяти устанавливаем тот же
                // режим отображения, что используется в
                // контексте отображения
                SetMapMode(hMemDC, GetMapMode(hdc));
 
                // Определяем размеры изображения
                GetObject(hBitmap, sizeof(BITMAP), (LPSTR) &bm);
 
                ptSize.x = bm.bmWidth;  // ширина
                ptSize.y = bm.bmHeight; // высота
 
                // Преобразуем координаты устройства в логические
                // для устройства вывода
                DPtoLP(hdc, &ptSize, 1);
 
                ptOrg.x = 0;
                ptOrg.y = 0;
 
                // Преобразуем координаты устройства в логические
                // для контекста памяти
                DPtoLP(hMemDC, &ptOrg, 1);
 
                // Рисуем изображение bitmap
                BitBlt(hdc, x, y, ptSize.x, ptSize.y,
                        hMemDC, ptOrg.x, ptOrg.y, SRCCOPY);
 
                // Восстанавливаем контекст памяти
                SelectObject(hMemDC, hOldbm);
        }
 
        // Удаляем контекст памяти
        DeleteDC(hMemDC);
}
Digit@ll, когда кидаешь камни в огород будь добр принимать тот факт что моим делом было поправить код автора, а не писать клубничку(клубнички я за деньги делаю). На счёт переписи проекта, улыбнул конечно

Не по теме:

Неужели и как долго? - без утечки GDI работает от запуска Арр до выключения ПК

Вложения
Тип файла: rar PROJ_WITHOUT_GDI_LEAKEGE.rar (73.3 Кб, 75 просмотров)
1
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,307
02.06.2013, 22:01
Не работает при компиляции выскакивает ошибка на скриншоте внизу?????????
Миниатюры
Загрузка изображения bmp из ресурсов  
0
02.06.2013, 22:14

Не по теме:

isaak, Internal error during Incrementing говорит о кривой версии компилятора

0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,307
02.06.2013, 22:28
-=ЮрА=- предыдущий проект нормально же работал таких ошибок не выскакивало. Компиляция всегда проходила нормально без ошибок. Почему именно сейчас при компиляции стали появляться такие ошибки??????? Ни как не пойму???????

Добавлено через 6 минут
Странно сейчас все скомпилировалось без ошибок и все работает, прям мистика какая то?????????
0
02.06.2013, 22:51

Не по теме:

isaak, когда компилируешь жми проект->Перестроить проект (ReBuild) это важно

0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,307
02.06.2013, 23:00
-=ЮрА=- хорошо понял!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.06.2013, 23:00
Помогаю со студенческими работами здесь

Программная загрузка изображения из ресурсов в Image WPF
Всем привет, знакомлюсь с C#, начал с WPF, пытаюсь программно загрузить картинку в Image, изображение является внедренным ресурсом, уже...

OpenGL - чтение bmp-файлов из ресурсов. VC. С++
Здравствуйте! В процессе обучения openGL возникла следующая проблема. Сразу замечу, что я пересмотрел множество тем с похожим содержанием,...

Загрузка bmp из БД
Доброго времени! Нужно в печатную форму в QRImage загрузить логотип из MS SQL server. Использовать по лицензионным причинам могу...

Загрузка bmp из файла
Необходимо по нажатию кнопки создать диалоговое окно и открыть выбранный bmp файл. Имеется такой вот код: case IDB_Button5: { ...

Загрузка bmp файла
установил RAD 2010, auxDIBImageLoad перестал работать(символ не найден пишет мне студия). можете пожалуйста скинуть замену этой функции,...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru