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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
GaRRRiK
0 / 0 / 0
Регистрация: 14.05.2011
Сообщений: 10
#1

Считывание bmp - C++

15.07.2012, 08:05. Просмотров 1927. Ответов 4
Метки нет (Все метки)

Здравствуйте, мне надо считать изображение, содержащая только 2х цветную палитру, и просканировать картинку на наличие черных пикселей, если попался черный пиксель, вывести координаты и записать в двумерный массив. Считать разрешение картинки получилось. А прогнать цикл попиксельно не удается.
Зы, вот код того, как считываю разрешение
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
#include <math.h>     ///////////////////////////////
#include <iostream>   ///////////////////////////////
#include <conio.h>    ///////////////////////////////
#include <time.h>     ////// Всякие библиотеки //////
#include <stdlib.h>   ///////////////////////////////   
#include <windows.h>  ///////////////////////////////
#pragma pack(1)
using namespace std;
 
    int xx,yy,pr,black;
 
///////////////////работа с BMP//////////////
typedef struct {
    WORD bfType;
    DWORD bfSize;
    WORD bfReserved_1, bfReserved_2;
    DWORD bfOffBits;                
}BitMapFileHeader;
 
typedef struct {
    DWORD biSize;
    LONG biWidth;
    LONG biHeight;
    WORD biPlanes;
    WORD biBitCount; 
    DWORD biCompression;
    DWORD biSizeImage;
    LONG biXPelsPerMeter;
    LONG biYPelsPerMeter;
    DWORD biClrUsed;
    DWORD biClrImportant;
}BitMapInfoHeader;
 
typedef struct{
    char rgbRed;
    char rgbGreen;
    char rgbBlue;
    char rgbReserved;
} RGB_Struct;
 
int main(){
setlocale (LC_ALL,".1251"); //вывод русских букв
 
    FILE *f1;
 
            BitMapFileHeader file_header; 
            BitMapInfoHeader info_header;
            RGB_Struct rgb[256];
            
            f1 = fopen("gr.bmp", "rb");
 
            if (f1 == NULL){
                cout << "Загрузите изображение в ту папку, где находится эта программа, назвав gr.bmp\n";
                cout << "Придется закрыть программу\n";
                cout << "Нажмите любую клавишу для выхода";
                _getch();
            }
            else{
            cout<< "Вы используете изображение gr.bmp\n";
            
            fread(&file_header, sizeof(file_header),1 ,f1);       
            SetFilePointer (f1, file_header.bfOffBits, NULL, FILE_BEGIN);       
            cout<< "Его размер = " << file_header.bfSize<<" байт\n";
            fread(&info_header, sizeof(info_header), 1, f1);
            //cout<< " - Ширина = " <<info_header.biWidth<<" пикселей\n";
            cout<< "Нажмите любую клавишу\n";
            _getch();
            system("cls");
                for (yy = 0; yy<=info_header.biHeight; yy++){
                    for (xx = 0; xx<=info_header.biWidth; xx++){
                        /*вот тут надо мучить картинку*/
                        }
                }
            
 
                        _getch();
                        //Вывод того, что просканировали
                        system("cls");
                        cout<<"Готово!\n";
                        cout<< " - Ширина = " <<xx<<" пикселей\n";
                        cout<< " - Высота = " <<yy<<" пикселей\n";
 
            /////////////закончили работу с картинкой
 
 
 
 
            }//конец работы с графиком
    _getch();
    system("cls"); //очистка экрана
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2012, 08:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считывание bmp (C++):

Считывание и запись .bmp файлов - C++
Здравствуйте. Помогите, пожалуйста, разобраться почему не работает сохранение bmp файла. Открываю 1 файл, загружаю его и все данные...

Работа с bmp файлом. Считывание значение пикселей в массив - C++
Здравствуйте. Необходимо написать код который считывает из bmp картинки значение пикселей RGB в массив. Спасибо за внимание!

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

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

bmp 8 - C++
Помогите пожалуйста, нужно реализовать алгоритм Линде-Бузо-Грея для BMP файла. Проблема появляется при записи файла в формат bmp 8 -...

bmp в C++ - C++
Помогите пожалуйста написать программу на C++ которая уменьшает разрешение bmp картинки в 2 раза. Можно использовать только библиотеку ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
15.07.2012, 11:10 #2
похоже этот код рассчитан, что бимтапка 32битная на пиксель. в этом случае за заголовком или еще где-то хранятся пиксели последовательно. цвет закодирован в двух байтах. в случае с 2х цветной паллитрой формат файла совсем не такой. какой - я не знаю. попробуйте для начала подсовывать своей программе именно 32битные питмапки, в которых только черное и белое. когда заработает с 32битными картинками, тогда уже можно будет подумать (поискать инфу) о том, как это сделать с битмапками, в которых есть палитра.
Еще я помню, что в случае с 32битными картинками там хитрость с шириной. например если картинка шириной в 15 пикселей, то в массив байт по ширине выравнивается до 16. если 30, то выравнивается до 32. но это не точно. в общем для экспериментов сперва есть смысл поработать с 32битной битмапкой с размером 16x16
GaRRRiK
0 / 0 / 0
Регистрация: 14.05.2011
Сообщений: 10
15.07.2012, 12:40  [ТС] #3
Спасибо за инфу. А можно код, как просканировать каждый пиксель? Цикл у мну готов, но что далее туда вписать я не знаю. я весь инет просмотрел, прочитал, что есть компонет TImage, но мне нужно для консольной программы...
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
15.07.2012, 12:56 #4
не совсем понял что значит просканировать. вот тут попробуйте разобраться с вторым постом:
найдите ошибку, программа переворачивающая изображение на 90 градусов
в функции povorot90 запись arrbmp[i][j] - это как раз пиксель с координатами i j. Если все его поля равны нулю, то он черный, если все поля равны 255, то он белый.
GaRRRiK
0 / 0 / 0
Регистрация: 14.05.2011
Сообщений: 10
15.07.2012, 12:59  [ТС] #5
я имел в виду, заставить программу пройти каждый пиксель, попался черный , записать его координаты в двумерный масив, спасибо за ссылку
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2012, 12:59
Привет! Вот еще темы с ответами:

Отразить bmp - C++
Здравствуйте, подскажите, как можно отразить bmp по вертикали или горизонтали? На WinAPI. Желательно код. Спасибо.

Стеганография в BMP - C++
Проект выполняющий метод lsb. В коде ошибки. Не могу понять как исправить. Прошу помочь, может кто разбирается в таких вещах. ...

Wav в bmp - C++
Подскажите, пожалуйста, как разложить побитово wav-file и сложить его в bmp? Можно примеры кода?

BMP - файл - C++
Доброго времени суток ! Друзья, где можно почитать про BMP файлы, посмотреть примеры (код) ? Интересует: как изменить яркость. ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.07.2012, 12:59
Ответ Создать тему
Опции темы

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