С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
rikimaru2013
C++ Game Dev
2440 / 1133 / 240
Регистрация: 30.11.2013
Сообщений: 3,690
#1

Вывод в консоль SetPixel(R,G,B) с 256-цветового *.bmp - C++

19.01.2014, 01:40. Просмотров 732. Ответов 1
Метки нет (Все метки)

Добрый вечер,
пытаюсь прочитать *.bmp файл заведомо известного размера и вывести его в консоль через SetPixel
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
#include <iostream>
#include <fstream>
#include <windows.h>
 
 
using namespace std;
 
void main()
{
    char* in = "try1.bmp";
    char* out = "out.txt";
    ifstream ifs(in);
    ofstream ofs(out);
    char ch;
    while(ifs.get(ch))
    {
       
        ofs << "0x" << hex << static_cast<int>(ch) << " ";
        // char temp_RBG[] = ;
        // a=b=c=0;
       
    }
    /////// Допишу как будут данные такого типа 0xFF16A7 в переменной temp_RBG
    //  HWND hwnd = GetConsoleWindow();
    //  SetPixel(GetDC(hwnd), i+100, j+100, RGB(a, b, c)); 
}
Для теста взял try1.bmp 5x5, где:
- 1-ая строка 5 пикселей RGB 0xFF0000
- 2-ая строка 5 пикселей RGB 0x01FF01
- 3-ая строка 5 пикселей RGB 0x0000FF
- 4-ая строка 5 пикселей RGB 0x1c404c
- 5-ая строка 5 пикселей RGB 0x1cff4d

Вот, что вышло http://img811.imageshack.us/img811/4344/34v3.jpg где красным обвёл как я понимаю 54 технических байта и далее не могу найти свои цвета.

Сам try1.bmp http://img600.imageshack.us/img600/4666/cg74.png

Хочу написать функцию отрисовки картинки .bmp с файла draw("try1.bmp", coord_x, coord_y). Зарание спасибо за помощь!

P.S. Описание формата BMP на википедии с примерами на разных форумах рассмотрел. Не смог применить на своём примере.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2014, 01:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод в консоль SetPixel(R,G,B) с 256-цветового *.bmp (C++):

Вывод чисел 1-256 в двоичной, восьмеричной и шестнадцатиричной системах - C++
Программа моя работает, но не совсем правильно. Она переводит числа из десятичной системы в другие путем деления и вычисления остатка. ...

Реализовать вывод массива объектов типа Student на консоль (файловый ввод/вывод) - C++
Как сделать чтобы список студентов выводился на экран в конце? #include&lt;iostream&gt; #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; ...

Вывод информации о *.bmp на чистом C++ - C++
Собственно вот: #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;cmath&gt; using namespace std; int main(int argc, char...

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

Ввод/Вывод BMP-файла в консольном приложении C++ - C++
Здравствуйте уважаемые. Нужно реализовать ввод/вывод BMP в двумерную матрицу структур RGB. через ifstream и ofstream. Объясните вкратце...

Вывод в консоль - C++
Код без ошибок (VS не ругается при компиляции)! Но консоль не хочет выводить сообщений.. В чем может быть проблема? В консоли виден...

1
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
19.01.2014, 09:11 #2
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
далее не могу найти свои цвета.
как не можете?
Вон же 0x4d 0xff 0x1c - таких 5 участков
далее идут 0x4c 0x40 0x1c - таки тоже 5 штук
потом идут 0xff 0x0 0x0 - таких тоже 5
далее 0x01 0xff 0x01 - тоже 5 штук
и потом еще 0x0 0x0 0xff - тоже 5 штук
Почему именно так они расположены? Если действительно
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Описание формата BMP на википедии с примерами на разных форумах рассмотрел.
то должны знать, что изображение в файл записывается с последней строки и получается по сути перевернутым, а так же при количестве бит на пиксель равным 24 (смотрите, у Вас в заголовке есть байт 0x18) каждый цвет записывается тремя байтами в формате BGR, а не RGB
Так же после каждой строки имеется один лишний байт 0x0 - выравнивание равное одному байту (чтобы получилось 16 байт в строке)

Добавлено через 3 минуты
Вот даже цитата с википедии:
Последовательность пикселей, записанных в том или ином виде. Пиксели хранятся построчно, снизу вверх. Каждая строка изображения дополняется нулями до длины, кратной четырём байтам.

В bmp-файлах с глубиной цвета 24 бита, байты цвета каждого пикселя хранятся в обратном порядке BGR (Blue, Green, Red)
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2014, 09:11
Привет! Вот еще темы с ответами:

Работа с BMP-файлами (класс "8 битное BMP изображение) - C++
Написать класс &quot;8 битное BMP изображение&quot;.Класс должен содержать 3 конструктора: конструктор по умолчанию, конструктор с параметрами и...

Неверный вывод в консоль - C++
доброго времени суток не могу понять что не правильно..до этого писал на шарпе .там проблем с многомерными массивами не было.... теперь в...

Вывод кириллицы в консоль - C++
Все правильно написал , сделал. #include &lt;iostream&gt; #include &lt;windows.h&gt; #include &lt;string&gt; using namespace std; struct elem { ...

Вывод круга в консоль - C++
Доброго времени суток. Подскажите как вывести круг в консоль по заданному диаметру


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

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

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