4 / 4 / 2
Регистрация: 27.10.2014
Сообщений: 90
1

Вывод изображения из файла в окно (Winapi)

15.11.2014, 19:23. Показов 3458. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
делаю так но выводит белый фон
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
  case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
 
     
                
                     hdc = BeginPaint(hWnd, &ps);
        hBitmap = LoadImage(NULL, L"screen.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
        GetObject(hBitmap, sizeof(BITMAP), &Bitmap);
        hCompatibleDC = CreateCompatibleDC(hdc);
        hOldBitmap = SelectObject(hCompatibleDC, hBitmap);
        GetClientRect(hWnd, &Rect);
        StretchBlt(hdc, 0, 0, Rect.right, Rect.bottom, hCompatibleDC, 0, 0, Bitmap.bmWidth, 
            Bitmap.bmHeight, SRCCOPY);
        SelectObject(hCompatibleDC, hOldBitmap);
        DeleteObject(hBitmap);
        DeleteDC(hCompatibleDC);
        EndPaint(hWnd, &ps);
        return 0;
                    
                
 
       
        EndPaint(hWnd, &ps);
      break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
        break;
    }
В чем ошибка-то?

Добавлено через 32 минуты
Ап, в чем ошибка?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.11.2014, 19:23
Ответы с готовыми решениями:

Вывод текста из файла в диалоговое окно winAPI
Доброго времени суток! Прошу помочь, не могу понять как сделать. Программа выводит окно с...

Вывод цифр в окно winapi c++
Всем привет!) подскажите как выводить числа в окно ? ::SetTextAlign(hdc, TA_LEFT | TA_TOP);...

Вывод изображения в окно. Где ошибка?
Вот пытаюсь вывести изображение: LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message,...

Вывод изображения в WinAPI
Вот не получается загрузить картинку Делаю по примеру найденому здесь на форуме Но у меня не...

7
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
15.11.2014, 22:57 2
Попробуй использовать вместо StretchBlt BitBlt. Так же проверь расположение файла (должен быть в папке с проектом) и его имя, в том числе регистры.
0
Модератор
3488 / 2611 / 741
Регистрация: 19.09.2012
Сообщений: 7,971
15.11.2014, 23:40 3
Цитата Сообщение от kessor Посмотреть сообщение
в чем ошибка?
Попробуй указать полный путь к файлу.
Так все работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        {
            HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, L"d:\\11.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
            BITMAP Bitmap;
            GetObject(hBitmap, sizeof(BITMAP), &Bitmap);
            HDC hCompatibleDC = CreateCompatibleDC(hdc);
            HBITMAP hOldBitmap = (HBITMAP)SelectObject(hCompatibleDC, hBitmap);
            RECT Rect;
            GetClientRect(hWnd, &Rect);
            StretchBlt(hdc, 0, 0, Rect.right, Rect.bottom, hCompatibleDC, 0, 0, Bitmap.bmWidth,
                Bitmap.bmHeight, SRCCOPY);
            SelectObject(hCompatibleDC, hOldBitmap);
            DeleteObject(hBitmap);
            DeleteDC(hCompatibleDC);
        }
        EndPaint(hWnd, &ps);
        break;
0
Brainsbreaker
897 / 373 / 53
Регистрация: 01.02.2011
Сообщений: 1,598
16.11.2014, 00:39 4
Я не знаю, как там в других средах, но в Visual Studio это подводный камень. Если запускать программу с относительным путем к файлу из среды, то его нужно помещать в каталог вместе с исходниками, а если сам exe, то рядом. Об этом нужно просто знать и всегда это учитывать.
0
Ушел с форума
Эксперт С++
16458 / 7422 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
16.11.2014, 12:14 5
Цитата Сообщение от Digit@ll Посмотреть сообщение
не знаю, как там в других средах, но в Visual Studio это подводный камень. Если запускать программу с относительным путем к файлу из среды, то его нужно помещать в каталог вместе с исходниками, а если сам exe, то рядом. Об этом нужно просто знать и всегда это учитывать.
Visual Studio здесь не при чем.
В Windows есть понятие "current directory" - она может отличаться от той,
где лежит exe-файл.

Добавлено через 6 минут
Поэтому если и использовать относительные пути, то после SetCurrentDirectory
(что тоже ненадежно в многопоточных программах), либо всегда использовать
полные пути.
0
4 / 4 / 2
Регистрация: 27.10.2014
Сообщений: 90
19.11.2014, 01:09  [ТС] 6
Не робит хоть ты тресни
Как проверить удачно ли выполнилась эта функция?
И может есть др способ?
0
Ушел с форума
Эксперт С++
16458 / 7422 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
19.11.2014, 08:56 7
Цитата Сообщение от kessor Посмотреть сообщение
Не робит хоть ты тресни
Как проверить удачно ли выполнилась эта функция?
Проверить код, который она возвращает. Заглянуть в документацию (MSDN) на
счет этого кода. Далее обычно GetLastError -> Error Lookup и т.д.
0
120 / 142 / 46
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
21.11.2014, 06:26 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <windows.h>
#include <tchar.h>
#include <gdiplus.h>
#pragma comment(lib, "gdiplus.lib")
 
using namespace Gdiplus;
ULONG_PTR gdiplusToken;
Enter to main()
{
GdiplusStartupInput gdiplusStartupInput;
gdiplusStartupInput.GdiplusVersion = 1;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
 
...........
Code
...........
 
 
GdiplusShutdown(gdiplusToken);
return from main()
}
C++
1
2
3
4
5
6
7
8
        case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hDC = BeginPaint(hWnd,&ps);
            Example_DrawImage(hDC);
            EndPaint(hWnd,&ps);
            return 0;
        }
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
VOID Example_DrawImage(HDC hdc)
 
{
   Graphics graphics(hdc);
 
   // Create an Image object.
   Image image(_T("mspaint.png"));
 
   // Create a Pen object.
   Pen pen (Color(255, 255, 0, 0), 2);
 
   // Draw the original source image.
   graphics.DrawImage(&image, 0, 0);
 
   // Create a Rect object that specifies the destination of the image.
   Rect destRect(0, 0, image.GetWidth(), image.GetHeight());
 
   // Draw the rectangle that bounds the image.
   graphics.DrawRectangle(&pen, destRect);
 
   // Draw the image.
   graphics.DrawImage(&image, destRect);
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.11.2014, 06:26
Помогаю со студенческими работами здесь

Вывод изображения WinAPI
Здравствуйте! Нужно сделать что-то типа графического редоктора, который накладывает фильтры на...

Visual Studio 2008, WinAPI - Вывод изображения
Как вывести изображение на форму? В гугле искал, но там что-то ничего того,что я могу понять не...

Вывод изображения не в отдельное окно, а на рабочий стол
Есть программа, которая просто выводит рисунок (рисунок сам написан в delphi), но возможно ли...

Вывод содержимого log-файла е окно Командной строки
Здравствуйте, помогите пожалуйста дополнить bat-ник. Имеется .bat, который запускает сервер CS:S:...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru