Форум программистов, компьютерный форум CyberForum.ru

открыть изображение в консоли - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.85
yTpO
5 / 5 / 0
Регистрация: 15.03.2013
Сообщений: 67
20.04.2013, 12:15     открыть изображение в консоли #1
Доброго времени суток.
Мне нужно при выполнении программы в конце всех вычислений открыть картинку с результатами для сравнения. Открыть нужно в консоли, не через ShellExecute в отдельной программе. Картинка лежит в папке с файлом *.cpp и *.exe
Может кто знает, как это осуществить и вообще, можно ли такое сделать в c++?
Работаю в Dev-C++.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
20.04.2013, 12:27     открыть изображение в консоли #2
ShellExecute( NULL, "open", "image.png", NULL, NULL, SW_SHOWNORMAL );
phantom96
MЫW
 Аватар для phantom96
124 / 109 / 1
Регистрация: 15.02.2013
Сообщений: 538
20.04.2013, 12:45     открыть изображение в консоли #3
Вы что, внутри консоли ничего не откроется. Как минимум нужно создавать своё окно для картинки.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
20.04.2013, 12:47     открыть изображение в консоли #4
Цитата Сообщение от yTpO Посмотреть сообщение
в отдельной программе
...
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
20.04.2013, 13:04     открыть изображение в консоли #5
В консоле можно точно так же легко рисовать, как в гуевом окне, в т.ч. можно выводить картинки. Я точно не помню как это делается, почитай про контекст устройства и что-нибудь типа BitBlt().
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
20.04.2013, 13:09     открыть изображение в консоли #6
Грузим картинку в BITMAP с совместимым контекстом, потом BitBlt с созданного контекста на контекст консоли.
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
20.04.2013, 13:15     открыть изображение в консоли #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от phantom96 Посмотреть сообщение
Вы что, внутри консоли ничего не откроется. Как минимум нужно создавать своё окно для картинки.
Да ну !!! А это как же ?
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
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <conio.h>
#include <iostream>
 
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);
}
 
 
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
 
 static HBITMAP hBitmap;
 PAINTSTRUCT ps;    
 
     static char MyName[MAX_PATH]={0};
 
     GetModuleFileNameA(NULL, MyName, sizeof(MyName));
    HWND hwnd=FindWindow(NULL,MyName);
HDC hdc;
hdc=GetWindowDC(hwnd);
 
    hBitmap = (HBITMAP)LoadImage(NULL, "1.bmp", IMAGE_BITMAP, 100, 100, LR_LOADFROMFILE);
 
std::cout<<"Hello world !!!"<<"\n";
 
    InvalidateRect(hwnd,NULL,TRUE);
 
 
                hdc=BeginPaint(hwnd,&ps);
                DrawBitmap(hdc, 0,20,hBitmap);
                EndPaint(hwnd,&ps);
 
  getch();
 
    return EXIT_SUCCESS;
 
}
Миниатюры
открыть изображение в консоли  
yTpO
5 / 5 / 0
Регистрация: 15.03.2013
Сообщений: 67
20.04.2013, 14:03  [ТС]     открыть изображение в консоли #8
Цитата Сообщение от Игорь с++ Посмотреть сообщение
Да ну !!! А это как же ?
Вот, что у меня выводит на ваш код. ничего не менял. В чём проблема?

открыть изображение в консоли
yTpO
5 / 5 / 0
Регистрация: 15.03.2013
Сообщений: 67
20.04.2013, 14:07  [ТС]     открыть изображение в консоли #9
Игорь с++, а можно использовать только .BMP или любые форматы изображений?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
20.04.2013, 14:50     открыть изображение в консоли #10
yTpO, потребуется "раскорячить" фаил вручную.

Добавлено через 1 минуту
yTpO, текст ошибок какой?
yTpO
5 / 5 / 0
Регистрация: 15.03.2013
Сообщений: 67
20.04.2013, 15:01  [ТС]     открыть изображение в консоли #11
Croessmah, я же скрин выше кинул. при компилировании кидает ряд ошибок.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
20.04.2013, 15:24     открыть изображение в консоли #12
yTpO, Лично я не могу сейчас открыть скрин, поэтому и спросил
yTpO
5 / 5 / 0
Регистрация: 15.03.2013
Сообщений: 67
20.04.2013, 15:39  [ТС]     открыть изображение в консоли #13
Croessmah, аа. ну вот:
Код
In function `Z10DrawBitmapP5HDC(int, int, HBITMAP__ *)':
			[Linker error] C:/Users/6020/Pictures/кусрач/Безымянный1.cpp:15: undefined reference to `CreateCompatibleDC@4'
			[Linker error] C:\Users\6020\AppData\Local\Temp/ccs3daaa.o(.text+0x125):C:/Users/6020/Pictures/кусрач/Безымянный1.cpp:18: undefined reference to `SelectObject@8'
			[Linker error] C:\Users\6020\AppData\Local\Temp/ccs3daaa.o(.text+0x140):C:/Users/6020/Pictures/кусрач/Безымянный1.cpp:26: undefined reference to `GetMapMode@4'
			[Linker error] C:\Users\6020\AppData\Local\Temp/ccs3daaa.o(.text+0x152):C:/Users/6020/Pictures/кусрач/Безымянный1.cpp:26: undefined reference to `SetMapMode@8'
			[Linker error] C:\Users\6020\AppData\Local\Temp/ccs3daaa.o(.text+0x16f):C:/Users/6020/Pictures/кусрач/Безымянный1.cpp:29: undefined reference to `GetObjectA@12'
			[Linker error] C:\Users\6020\AppData\Local\Temp/ccs3daaa.o(.text+0x198):C:/Users/6020/Pictures/кусрач/Безымянный1.cpp:36: undefined reference to `DPtoLP@12'
			[Linker error] C:\Users\6020\AppData\Local\Temp/ccs3daaa.o(.text+0x1c3):C:/Users/6020/Pictures/кусрач/Безымянный1.cpp:43: undefined reference to `DPtoLP@12'
			[Linker error] C:\Users\6020\AppData\Local\Temp/ccs3daaa.o(.text+0x20a):C:/Users/6020/Pictures/кусрач/Безымянный1.cpp:46: undefined reference to `BitBlt@36'
			[Linker error] C:\Users\6020\AppData\Local\Temp/ccs3daaa.o(.text+0x21f):C:/Users/6020/Pictures/кусрач/Безымянный1.cpp:50: undefined reference to `SelectObject@8'
			[Linker error] C:\Users\6020\AppData\Local\Temp/ccs3daaa.o(.text+0x22d):C:/Users/6020/Pictures/кусрач/Безымянный1.cpp:54: undefined reference to `DeleteDC@4'
			collect2: ld returned 1 exit status
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
20.04.2013, 16:19     открыть изображение в консоли #14
Линкуйте с GDI библиотекой
yTpO
5 / 5 / 0
Регистрация: 15.03.2013
Сообщений: 67
20.04.2013, 18:57  [ТС]     открыть изображение в консоли #15
Croessmah, не понял вас
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
20.04.2013, 19:23     открыть изображение в консоли #16
Цитата Сообщение от yTpO Посмотреть сообщение
Croessmah, не понял вас
Не знаю где это можно сделать в DEV C++, но ищите что-то вроде Linker->Libraries

Необходимо добавить библиотеку gdi32
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
20.04.2013, 19:55     открыть изображение в консоли #17
Project -> Project Option -> Paramentr -> Add Library or Object ->C:/Dev-Cpp/lib/libgdi32.a
Путь как сам понимаеш относительеый где у тебя установлен Dev - cpp ищещ папку lib и в ней ищеш libgdi32.a
yTpO
5 / 5 / 0
Регистрация: 15.03.2013
Сообщений: 67
21.04.2013, 13:28  [ТС]     открыть изображение в консоли #18
Нашёл вот такое решение. Как убрать открывающуюся консоль, т.е. чтобы открывалось только окно с заголовком "график зависимостей"?

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
#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);//Объявление окна, процедуры
 
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)
 
 
{
      keybd_event(VK_MENU, 0x38, 0, 0);
  keybd_event(VK_RETURN, 0x1c, 0, 0);
  keybd_event(VK_RETURN, 0x1c, KEYEVENTF_KEYUP, 0);
  keybd_event(VK_MENU, 0x38, KEYEVENTF_KEYUP, 0);
    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 */
 
    //Структура Window
    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 */
    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,// улучшенный стиль окна
           szClassName,// указатель на зарегистрированное имя класса
           "График зависимостей",// указатель на имя окна
           WS_SYSMENU, //Окно без полос прокрутки, только кнопка закрытия
           874, //Начальная координата окна по x
           453, //Начальная координата окна по y
           492, //размер окна по ширине
           275, //размер окна по высоте
           HWND_DESKTOP, //дочернее окно
           NULL, //отсутствие меню
           hThisInstance, //Обработчик экземпляра программы
           NULL //нет данных создания окна
           );
    ShowWindow (hwnd, nFunsterStil); //Сделать окно видимым на экране
    //Запустить цикл обработки сообщений. Он будет работать до тех пор пока GetMessage () возвращает 0
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages); //Перевести виртуальной клавиши сообщений в характере сообщений
        DispatchMessage(&messages); //Отправить сообщение для WindowProcedure
    }
    return messages.wParam;//Программа возвращения значения 0 - значение, которое PostQuitMessage () дал
}
 
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{/*Функция Windows, DispatchMessage ()*/
    static HBITMAP hBitmap;
        HDC hdc;
        PAINTSTRUCT ps;
    switch (message)//обработка сообщений
    {
        case WM_CREATE:
            hBitmap = (HBITMAP)LoadImage(NULL, "1.bmp", IMAGE_BITMAP, 477, 235, LR_LOADFROMFILE);
                break;
        case WM_PAINT:
            {
            hdc=BeginPaint(hwnd,&ps);
            DrawBitmap(hdc, 0,0,hBitmap);
            EndPaint(hwnd,&ps);
            return 0;
        }
 
        case WM_DESTROY:
        PostQuitMessage (0);//Написать WM_QUIT в очередь сообщений
            break;
        default://для сообщений, мы имеем дело не с
            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);
}
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
21.04.2013, 13:35     открыть изображение в консоли #19
yTpO, это чего ты нашёл то ? Это тоже самое что я тебе и выкладывал только под оконное приложение.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2013, 14:19     открыть изображение в консоли
Еще ссылки по теме:

C++ Меню на консоли
C++ Изображение на консоли
Вывести множество цифр, входящих в изображение числа N, которые не входят в изображение числа M C++

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

Или воспользуйтесь поиском по форуму:
yTpO
5 / 5 / 0
Регистрация: 15.03.2013
Сообщений: 67
21.04.2013, 14:19  [ТС]     открыть изображение в консоли #20
Игорь с++, ой сори. просто искал много где, вот и запутался. так как скрыть окно консоли? и желательно не свернуть, а просто не отображать его
Yandex
Объявления
21.04.2013, 14:19     открыть изображение в консоли
Ответ Создать тему
Опции темы

Текущее время: 08:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru