<iostream>
1

Вывод изображения на экран консоли после считывания из bmp файла

11.02.2009, 16:06. Показов 11957. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
(Дополнение к вопросу )
Задача состоит в следующем: есть двумерный штрих-код (PDF417) , напечатанный на бумаге. Далее этот рисунок сканируется - получаем файл формата bmp.
Необходимо считать это изображение (bmp) уже в среде Visual C++(из файла , я так понимаю) и вывести его на экран (точно по точкам , как в оригинале).
Вопрос : как это реализовать в данной среде ? Какие библиотеки нужно использовать ? Где вообще можно почитать информацию по данному вопросу ? Ну, если не затруднит - напишите ,пожалуйста , хотя бы кусочек кода, реализующего изложенный процесс )
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.02.2009, 16:06
Ответы с готовыми решениями:

Вывод bmp-шного изображения (картинки) на экран
Помогите мне пожалуйста!! Нужна простейшая программа, в окне которой выводится картинка, и...

Вывод изображения .jpg на экран консоли C++
Вывод изображения .jpg на экран консоли C++ Помогите пожалуйста. Мне даже в голову ничего не...

Вывод изображения .jpg на экран консоли C++
Вывод изображения .jpg на экран консоли C++ Помогите пожалуйста. Мне даже в голову ничего не...

Вывод на экран консоли только имени и даты создания файла
Здравствуйте, необходимо вывести на экран консоли имена и даты создания файлов, содержащих атрибут...

7
23 / 23 / 3
Регистрация: 20.02.2009
Сообщений: 59
21.02.2009, 01:31 2
Как по вашему можно вывести на экран консоли BMP?

Ну хорошо, попробуем реализовать задание дословно , примерно вот так:

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
#include <stdlib.h>
#include <windows.h>
#include <assert.h>
 
BOOL CALLBACK EnumWndProc(HWND hwnd, LPARAM lParam)
{
    if(GetWindowThreadProcessId(hwnd, NULL) == GetCurrentThreadId())
    {
        *(HWND*)lParam = hwnd;
        return FALSE;
    }
    return TRUE;
}
 
int main(void)
{
       // Находим своё окно.
    HWND hWnd;
    EnumWindows(EnumWndProc, (LPARAM)&hWnd);
    if(!IsWindow(hWnd))
        return 1;
 
        // Загружаем картинку
    HBITMAP hBmp = (HBITMAP)LoadImage(GetModuleHandle(0), "MyImage.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    
    BITMAP bmpInfo = {};
    ::GetObject(hBmp, sizeof(BITMAP), &bmpInfo);
 
    assert(bmpInfo.bmBitsPixel / 8 == sizeof(COLORREF));
 
    LONG nCount = bmpInfo.bmWidth * bmpInfo.bmHeight;
 
    COLORREF* pBits = new COLORREF[nCount];
    GetBitmapBits(hBmp, nCount * sizeof(COLORREF), pBits);
 
    HDC hDC = GetDC(hWnd);
 
        // Выводим изображение на экран (точно по точкам , как в оригинале)
    for(long y = 0; y < bmpInfo.bmHeight; ++y)
        for(long x = 0; x < bmpInfo.bmWidth; ++x)
        {
            SetPixel(hDC, x, y, pBits[y * bmpInfo.bmWidth + x]);
        } // for
    ReleaseDC(hWnd, hDC);
 
    delete [] pBits;
 
    system("PAUSE");
    return 0;
}
1
0 / 0 / 0
Регистрация: 19.02.2009
Сообщений: 3
22.02.2009, 15:48 3
А у меня проблемка в другом, мне нужно сформировать этисамыш двумерные штрих-коды...не подскажите как?
0
Brainsbreaker
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
06.01.2013, 04:16 4
Интересно, а что с чем сравнивается в 8 строке.
0
23 / 23 / 3
Регистрация: 20.02.2009
Сообщений: 59
09.01.2013, 09:40 5
Там проверяется, что окно принадлежит потоку приложения (создано в нем). Тем самым мы находим именно наше консольное окно.
0
Brainsbreaker
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
09.01.2013, 10:24 6
По логике там правильно проверяется, сравниваются нити окна, но вот только какого. У меня перебирает все имеющиеся окна, кроме моей консоли. Заработало только после добавления hWnd = FindWindow (0, "console"); перед EnumWindows. И опять же окно.
0
23 / 23 / 3
Регистрация: 20.02.2009
Сообщений: 59
09.01.2013, 11:20 7
Смотрим MSDN: The EnumWindows function enumerates all top-level windows on the screen by passing the handle to each window...

Фактически она перебирает все окна всех процессов, у которых родителем является рабочий стол. Но нам нужно только одно окно - и это окно нашего процесса. Поэтому мы проверяем всё что находит EnumWindows на предмет принадлежности к основному потоку нашего процесса. В любом случае почему приведенный код не работает нужно разбираться на месте, может быть стоит сравнивать идентификаторы процесса, может быть еще что-то.

PS. Код
C++
1
hWnd = FindWindow (0, "console");
будет некорректно работать в случае, когда запущено несколько консольных окон.
0
13 / 13 / 1
Регистрация: 31.12.2010
Сообщений: 131
Записей в блоге: 14
29.12.2014, 01:18 8
Цитата Сообщение от TurboDune Посмотреть сообщение
Ну хорошо, попробуем реализовать задание дословно , примерно вот так:
почему то ваш пример у меня не правильно цвета выводит
0
29.12.2014, 01:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.12.2014, 01:18
Помогаю со студенческими работами здесь

Вывод картинки bmp в консоли
Помогите с графическим оформлением программы. Завтра сдавать программу уже, поэтому на изучение...

Вывод 24-битного BMP-изображения
Написал код .286 ASSUME CS:CODE,DS:CODE CODE segment ORG 100h start: mov ax,13h int 10h ...

Кривой вывод изображения в bmp-файле
всем привет, при записывании информации в bmp-файл столкнулся со следующей...

Сохранение RGB изображения после преобразования в файл *.bmp формата
Вот такая ситуация у меня: Есть bmp рисунок и мне нужно сделать с него 24-битную картинку. ...


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

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

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