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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
GaRRRiK
0 / 0 / 0
Регистрация: 14.05.2011
Сообщений: 10
15.07.2012, 08:05     Считывание bmp #1
Здравствуйте, мне надо считать изображение, содержащая только 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 (24 битный)
C++ [C++] 24-битные BMP
C++ BMP - файл
C++ bmp в C++
C++ Работа с BMP-файлами (класс "8 битное BMP изображение)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
15.07.2012, 11:10     Считывание bmp #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  [ТС]     Считывание bmp #3
Спасибо за инфу. А можно код, как просканировать каждый пиксель? Цикл у мну готов, но что далее туда вписать я не знаю. я весь инет просмотрел, прочитал, что есть компонет TImage, но мне нужно для консольной программы...
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
15.07.2012, 12:56     Считывание bmp #4
не совсем понял что значит просканировать. вот тут попробуйте разобраться с вторым постом:
найдите ошибку, программа переворачивающая изображение на 90 градусов
в функции povorot90 запись arrbmp[i][j] - это как раз пиксель с координатами i j. Если все его поля равны нулю, то он черный, если все поля равны 255, то он белый.
GaRRRiK
0 / 0 / 0
Регистрация: 14.05.2011
Сообщений: 10
15.07.2012, 12:59  [ТС]     Считывание bmp #5
я имел в виду, заставить программу пройти каждый пиксель, попался черный , записать его координаты в двумерный масив, спасибо за ссылку
Yandex
Объявления
15.07.2012, 12:59     Считывание bmp
Ответ Создать тему
Опции темы

Текущее время: 01:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru