Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 1
Регистрация: 14.05.2011
Сообщений: 10
1

Считывание bmp

15.07.2012, 08:05. Просмотров 3449. Ответов 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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.07.2012, 08:05
Ответы с готовыми решениями:

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

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

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

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

4
DU
1492 / 1138 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
15.07.2012, 11:10 2
похоже этот код рассчитан, что бимтапка 32битная на пиксель. в этом случае за заголовком или еще где-то хранятся пиксели последовательно. цвет закодирован в двух байтах. в случае с 2х цветной паллитрой формат файла совсем не такой. какой - я не знаю. попробуйте для начала подсовывать своей программе именно 32битные питмапки, в которых только черное и белое. когда заработает с 32битными картинками, тогда уже можно будет подумать (поискать инфу) о том, как это сделать с битмапками, в которых есть палитра.
Еще я помню, что в случае с 32битными картинками там хитрость с шириной. например если картинка шириной в 15 пикселей, то в массив байт по ширине выравнивается до 16. если 30, то выравнивается до 32. но это не точно. в общем для экспериментов сперва есть смысл поработать с 32битной битмапкой с размером 16x16
0
0 / 0 / 1
Регистрация: 14.05.2011
Сообщений: 10
15.07.2012, 12:40  [ТС] 3
Спасибо за инфу. А можно код, как просканировать каждый пиксель? Цикл у мну готов, но что далее туда вписать я не знаю. я весь инет просмотрел, прочитал, что есть компонет TImage, но мне нужно для консольной программы...
0
DU
1492 / 1138 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
15.07.2012, 12:56 4
не совсем понял что значит просканировать. вот тут попробуйте разобраться с вторым постом:
найдите ошибку, программа переворачивающая изображение на 90 градусов
в функции povorot90 запись arrbmp[i][j] - это как раз пиксель с координатами i j. Если все его поля равны нулю, то он черный, если все поля равны 255, то он белый.
0
0 / 0 / 1
Регистрация: 14.05.2011
Сообщений: 10
15.07.2012, 12:59  [ТС] 5
я имел в виду, заставить программу пройти каждый пиксель, попался черный , записать его координаты в двумерный масив, спасибо за ссылку
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.07.2012, 12:59

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Побитовое считывание bmp-файла
Здравствуйте! Задача состоит в том чтобы прочесть bmp файл и представить его в виде битовой матрицы...

Создание монохромного bmp из одной из 24-х плоскостей 24-битного bmp
Здравствуйте. Стоит задача разбить 24-х битное bmp изображение на 24 плоскости с последующей...

Изображение bmp, операция над ним, снова в bmp
Задание состоит в следующем: 1. Перевести изображение в матрицу. 2. Удалить определенные...

Конвертер BMP 32 bit BGRA в BMP 8 bit c Palette
Добрый день! есть следующий вариант преобразования procedure TForm1.Button1Click(Sender:...


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

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

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