Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.85
yTpO
5 / 5 / 3
Регистрация: 15.03.2013
Сообщений: 67
#1

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

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

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

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

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

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

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

Необходимо переименовать файл с консоли, а после открыть его для редактирования
Необходимо переименовать файл из консоли программы, а после открыть его для редактирования. Не понимаю, как это сделать...

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

30
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
20.04.2013, 12:27 #2
ShellExecute( NULL, "open", "image.png", NULL, NULL, SW_SHOWNORMAL );
0
phantom96
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
20.04.2013, 12:45 #3
Вы что, внутри консоли ничего не откроется. Как минимум нужно создавать своё окно для картинки.
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
20.04.2013, 12:47 #4
Цитата Сообщение от yTpO Посмотреть сообщение
в отдельной программе
...
0
Kastaneda
Jesus loves me
Эксперт С++
4759 / 2962 / 340
Регистрация: 12.12.2009
Сообщений: 7,520
Записей в блоге: 2
Завершенные тесты: 1
20.04.2013, 13:04 #5
В консоле можно точно так же легко рисовать, как в гуевом окне, в т.ч. можно выводить картинки. Я точно не помню как это делается, почитай про контекст устройства и что-нибудь типа BitBlt().
0
Croessmah
++Ͻ
14146 / 8071 / 1512
Регистрация: 27.09.2012
Сообщений: 19,905
Записей в блоге: 3
Завершенные тесты: 1
20.04.2013, 13:09 #6
Грузим картинку в BITMAP с совместимым контекстом, потом BitBlt с созданного контекста на контекст консоли.
0
Игорь с++
472 / 464 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
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;
 
}
3
Миниатюры
Открыть изображение в консоли  
yTpO
5 / 5 / 3
Регистрация: 15.03.2013
Сообщений: 67
20.04.2013, 14:03  [ТС] #8
Цитата Сообщение от Игорь с++ Посмотреть сообщение
Да ну !!! А это как же ?
Вот, что у меня выводит на ваш код. ничего не менял. В чём проблема?

Открыть изображение в консоли
0
yTpO
5 / 5 / 3
Регистрация: 15.03.2013
Сообщений: 67
20.04.2013, 14:07  [ТС] #9
Игорь с++, а можно использовать только .BMP или любые форматы изображений?
0
Croessmah
++Ͻ
14146 / 8071 / 1512
Регистрация: 27.09.2012
Сообщений: 19,905
Записей в блоге: 3
Завершенные тесты: 1
20.04.2013, 14:50 #10
yTpO, потребуется "раскорячить" фаил вручную.

Добавлено через 1 минуту
yTpO, текст ошибок какой?
0
yTpO
5 / 5 / 3
Регистрация: 15.03.2013
Сообщений: 67
20.04.2013, 15:01  [ТС] #11
Croessmah, я же скрин выше кинул. при компилировании кидает ряд ошибок.
0
Croessmah
++Ͻ
14146 / 8071 / 1512
Регистрация: 27.09.2012
Сообщений: 19,905
Записей в блоге: 3
Завершенные тесты: 1
20.04.2013, 15:24 #12
yTpO, Лично я не могу сейчас открыть скрин, поэтому и спросил
0
yTpO
5 / 5 / 3
Регистрация: 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
0
Croessmah
++Ͻ
14146 / 8071 / 1512
Регистрация: 27.09.2012
Сообщений: 19,905
Записей в блоге: 3
Завершенные тесты: 1
20.04.2013, 16:19 #14
Линкуйте с GDI библиотекой
0
yTpO
5 / 5 / 3
Регистрация: 15.03.2013
Сообщений: 67
20.04.2013, 18:57  [ТС] #15
Croessmah, не понял вас
0
Croessmah
++Ͻ
14146 / 8071 / 1512
Регистрация: 27.09.2012
Сообщений: 19,905
Записей в блоге: 3
Завершенные тесты: 1
20.04.2013, 19:23 #16
Цитата Сообщение от yTpO Посмотреть сообщение
Croessmah, не понял вас
Не знаю где это можно сделать в DEV C++, но ищите что-то вроде Linker->Libraries

Необходимо добавить библиотеку gdi32
0
Игорь с++
472 / 464 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
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
0
yTpO
5 / 5 / 3
Регистрация: 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);
}
0
Игорь с++
472 / 464 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
21.04.2013, 13:35 #19
yTpO, это чего ты нашёл то ? Это тоже самое что я тебе и выкладывал только под оконное приложение.
0
yTpO
5 / 5 / 3
Регистрация: 15.03.2013
Сообщений: 67
21.04.2013, 14:19  [ТС] #20
Игорь с++, ой сори. просто искал много где, вот и запутался. так как скрыть окно консоли? и желательно не свернуть, а просто не отображать его
0
21.04.2013, 14:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2013, 14:19
Привет! Вот еще темы с решениями:

Клавиши F1-F12 в консоли, и работа с мышкой в консоли
Я искал на сайте, но не нашел упоминания о том как обрабатывать и или узнавать где находится курсор мышки (и еще мне надо бы узнать нажатие...

считывание с консоли ( не с клавы, а именно с консоли)
нужно написать функцию которая возвращает string в котором написано 500 символов которые были выведены в консоли от начала. среда :...

Вывести множество цифр, входящих в изображение числа N, которые не входят в изображение числа M
Помогите пожалуйста Сама задача &quot; Пусть заданы два натуральных числа N и M. Составить программу, которая выводила множество цифр,...

Нарисовать в консоли изображение по псевдографическому образцу
Не казните, за не опытность помогите кто чем может Воооообщем СУТЬ: Есть 1.TXT в нем картиночка символами нарисованная так нужен код...


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

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

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