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

Считывание bmp

15.07.2012, 08:05. Показов 4788. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.07.2012, 08:05
Ответы с готовыми решениями:

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

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

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

4
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
15.07.2012, 11:10
похоже этот код рассчитан, что бимтапка 32битная на пиксель. в этом случае за заголовком или еще где-то хранятся пиксели последовательно. цвет закодирован в двух байтах. в случае с 2х цветной паллитрой формат файла совсем не такой. какой - я не знаю. попробуйте для начала подсовывать своей программе именно 32битные питмапки, в которых только черное и белое. когда заработает с 32битными картинками, тогда уже можно будет подумать (поискать инфу) о том, как это сделать с битмапками, в которых есть палитра.
Еще я помню, что в случае с 32битными картинками там хитрость с шириной. например если картинка шириной в 15 пикселей, то в массив байт по ширине выравнивается до 16. если 30, то выравнивается до 32. но это не точно. в общем для экспериментов сперва есть смысл поработать с 32битной битмапкой с размером 16x16
0
0 / 0 / 1
Регистрация: 14.05.2011
Сообщений: 10
15.07.2012, 12:40  [ТС]
Спасибо за инфу. А можно код, как просканировать каждый пиксель? Цикл у мну готов, но что далее туда вписать я не знаю. я весь инет просмотрел, прочитал, что есть компонет TImage, но мне нужно для консольной программы...
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
15.07.2012, 12:56
не совсем понял что значит просканировать. вот тут попробуйте разобраться с вторым постом:
найдите ошибку, программа переворачивающая изображение на 90 градусов
в функции povorot90 запись arrbmp[i][j] - это как раз пиксель с координатами i j. Если все его поля равны нулю, то он черный, если все поля равны 255, то он белый.
0
0 / 0 / 1
Регистрация: 14.05.2011
Сообщений: 10
15.07.2012, 12:59  [ТС]
я имел в виду, заставить программу пройти каждый пиксель, попался черный , записать его координаты в двумерный масив, спасибо за ссылку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.07.2012, 12:59
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru