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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.85
yTpO
5 / 5 / 0
Регистрация: 15.03.2013
Сообщений: 67
#1

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

20.04.2013, 12:15. Просмотров 5064. Ответов 30
Метки нет (Все метки)

Доброго времени суток.
Мне нужно при выполнении программы в конце всех вычислений открыть картинку с результатами для сравнения. Открыть нужно в консоли, не через ShellExecute в отдельной программе. Картинка лежит в папке с файлом *.cpp и *.exe
Может кто знает, как это осуществить и вообще, можно ли такое сделать в c++?
Работаю в Dev-C++.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2013, 12:15     открыть изображение в консоли
Посмотрите здесь:

Изображение на консоли - C++
Возможно ли вывести на консоль трехмерное изображение? С помощью ассемблера, например. Или Си.

Возможно ли открыть консоль из консоли в С++? - C++
Возможно ли открыть консоль из консоли в С++?

Открыть COM порт, введя его имя в консоли - C++
пишу небольшую программку для опроса COM порта. Номер порта ввожу из консоли: // CA2.cpp: определяет точку входа для консольного...

Открыть изображение, на котором бы были ссылки (кнопки) для запуска программ. С чего начать? - C++
Подскажите пожалуйста! Хочу создать приложение, которое бы открывало изображение, на которм бы были ссылки(кнопки) для запуска программ.С...

шрифт в консоли - C++
как увеличить или уменьшить шрифт в консоли?

Анимация в консоли - C++
Как вы делаете анимацию в консоли? Я просто очищал екран вызывал метод который выводил все на екран но оно начиет мигать и как-то не...

Ctrl+Z в консоли - C++
Нужно написать примерно такое дело: чтобы консольное приложение на C++ при нажатии сочетания клавиш Ctrl+Z делало определённые действия (по...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4880 / 3016 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
20.04.2013, 12:27     открыть изображение в консоли #2
ShellExecute( NULL, "open", "image.png", NULL, NULL, SW_SHOWNORMAL );
phantom96
MЫW
124 / 109 / 1
Регистрация: 15.02.2013
Сообщений: 538
20.04.2013, 12:45     открыть изображение в консоли #3
Вы что, внутри консоли ничего не откроется. Как минимум нужно создавать своё окно для картинки.
castaway
Эксперт С++
4880 / 3016 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
20.04.2013, 12:47     открыть изображение в консоли #4
Цитата Сообщение от yTpO Посмотреть сообщение
в отдельной программе
...
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 226
Регистрация: 12.12.2009
Сообщений: 7,222
Записей в блоге: 1
Завершенные тесты: 1
20.04.2013, 13:04     открыть изображение в консоли #5
В консоле можно точно так же легко рисовать, как в гуевом окне, в т.ч. можно выводить картинки. Я точно не помню как это делается, почитай про контекст устройства и что-нибудь типа BitBlt().
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
20.04.2013, 13:09     открыть изображение в консоли #6
Грузим картинку в BITMAP с совместимым контекстом, потом BitBlt с созданного контекста на контекст консоли.
Игорь с++
433 / 456 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
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
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
20.04.2013, 16:19     открыть изображение в консоли #14
Линкуйте с GDI библиотекой
yTpO
5 / 5 / 0
Регистрация: 15.03.2013
Сообщений: 67
20.04.2013, 18:57  [ТС]     открыть изображение в консоли #15
Croessmah, не понял вас
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
20.04.2013, 19:23     открыть изображение в консоли #16
Цитата Сообщение от yTpO Посмотреть сообщение
Croessmah, не понял вас
Не знаю где это можно сделать в DEV C++, но ищите что-то вроде Linker->Libraries

Необходимо добавить библиотеку gdi32
Игорь с++
433 / 456 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
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);
}
Игорь с++
433 / 456 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
21.04.2013, 13:35     открыть изображение в консоли #19
yTpO, это чего ты нашёл то ? Это тоже самое что я тебе и выкладывал только под оконное приложение.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2013, 14:19     открыть изображение в консоли
Еще ссылки по теме:

Русик консоли - C++
Я конешно понимаю что поднимаю эту тему тысячный раз, но все таки: пишу на wxDev-C++ для русификации код: #include &lt;iostream&gt; ...

Псевдографика в консоли - C++
Доброе время суток! Ставил значит на днях Boost, через mac port и увидел очень занятную &quot;псевдографику&quot;. Сразу захотелось себе ее...

Магазин в консоли - C++
#include&lt;iostream&gt; using namespace std; class system_bloc { private: char *proc ; int cina_proc; char *mother; int...

Графика в консоли - C++
Здравствуйте, подскажите пожалуйста, можно ли в консоли с++ устроить графический интерфейс небольшой, например, расстоновка знаков в...

Кодировка в консоли - C++
Добрый день , имея некоторый опыт программирования на c# решил так же изучить С++, однако при написании простейшей программ (консольные...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru