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

8-битное BMP изображение

04.05.2013, 19:22. Показов 1780. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно закрасить bmp изображение в цвета российского флага. Пока получилось только красный цвет, а как сделать еще и синий?
Вот код:
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
typedef unsigned short int  word; 
typedef unsigned int        dword;
#pragma pack(push)
#pragma pack(1)
//рисунок 213*154=32802. Откуда 34342 ? 213%4=3 3*154(число строк)=462 462+32802=33264(размер картинки)
struct BitMapHeader
{
    word    bfType;             // тип файла, для BMP - BM 
    dword   bfSize;             // размер файла - dword (истинный размер 34342-1078+14)
    word    bfReserved1;        // не используется 
    word    bfReserved2;        // не используется 
    dword   bfOffbits;          // смещение данных битового образа от заголовка в байтах (1078) 
 
    // Далее идет структура BITMAPINFOHEADER 
    
    dword   biSize ;            // число байт, занимаемых структурой  BITMAPINFOHEADER 
    dword   biWidth;            // ширина витового образа в пикселях
    dword   biHeight;           // высота битового образа в пикселях
    word    biPlanes;           // число битовых плоскостей устройства
    word    biBitCount;         // число битов на пиксель 
    dword   biCompression;      // тип сжатия 
    dword   biSizeImage;        // размер картинки в байтах (без 1078 т.е.33264)
    dword   biXPelPerMeter;     // горизонтальное разрешение устройства, пиксель/м 
    dword   biYPelPerMeter;     // вертикальное разрешение устройства,  пиксель/м 
    dword   biClrUsed;          // число используемых цветов 
    dword   biClrImportant;     // число "важных" цветов 
};
 
typedef unsigned char       BYTE;
 
#pragma pack(pop)
 
struct tagRGBQUAD {
        BYTE    rgbBlue;
        BYTE    rgbGreen;
        BYTE    rgbRed;
        BYTE    rgbReserved;
} ;
 
BitMapHeader ReadHeader(FILE * f);
void ReadQuad(tagRGBQUAD* RGB,int biSize,FILE *f);
void WriteQuad(tagRGBQUAD* RGB,int biSize,FILE *f);
 
int main(int argc, char* argv[])
{
    BitMapHeader header;
    tagRGBQUAD RGBQuad[256];
    BYTE c;
    BYTE d;
    FILE* fb;   
    char filename[]="1.bmp";
    int i;
    if(!(fb=fopen(filename,"r+b"))){printf("file not open");return 1;}
 
    // заголовок
    header=ReadHeader(fb);
 
    // некоторые важные размеры
    printf("size of picture (biSizeImage)= %d\n",header.biSizeImage);
    printf("bfsize=%d\n",header.bfSize);
    printf("size of header+Quad (bfOffbits)= %d\n",header.bfOffbits);
    printf("size of header (biSize+14)= %d\n",header.biSize+14);
 
    // палитра
    ReadQuad(RGBQuad,header.biSize+14,fb);
    int n;
    int m;
    n=header.biHeight/3;
    m=header.biWidth;
    for(int i=0;i<256;i++)
        if(RGBQuad[i].rgbBlue==0 && RGBQuad[i].rgbGreen==0 && RGBQuad[i].rgbRed==255)
        {
            c=i;
            
            //break;
        }
 
    BYTE *a=new BYTE [n*m];
    for(i=0;i<n*m;i++)
        a[i]=c;
 
    fseek(fb,header.bfOffbits,SEEK_SET);
    fwrite(a,n*m,1,fb);
    c=255;
    for(i=0;i<n*m;i++)
        a[i]=c;
    fseek(fb,n*m,SEEK_CUR);
        fwrite(a,n*m,1,fb);
    delete[]a;
 
    WriteQuad(RGBQuad,header.biSize+14,fb);
    fclose(fb);
    return 0;
}
BitMapHeader ReadHeader(FILE * f)
{
    BitMapHeader h;
    int numread;
    fseek(f,0,SEEK_SET);
    if(!(numread=fread(&h,sizeof(BitMapHeader),1,f)))exit(1);
    return h;
}
    
void ReadQuad(tagRGBQUAD* RGB,int biSize,FILE *f)
{
    fseek(f,biSize,SEEK_SET);
    fread(RGB,1024,1,f);
}
 
 
 
void WriteQuad(tagRGBQUAD* RGB,int biSize,FILE *f)
{
    fseek(f,biSize,SEEK_SET);
    fwrite(RGB,1024,1,f);
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.05.2013, 19:22
Ответы с готовыми решениями:

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

1 битное bmp изображение
Добрый вечер. Необходимо написать программу на си++ которая создает файл bmp. Потом считываются с клавиатуры 6 цифр и они в виде индекса...

Считать BMP изображение в динамическую память
Нужно считать ВМР изображение в массив в динамической памяти используя fstream.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.05.2013, 19:22
Помогаю со студенческими работами здесь

Увеличить BMP изображение в два раза
Дано задание увеличить 8-битное BMP изображение в два раза. Функцию реализовать в классе. После некоторых размышлений получился сий код=)...

Из массива пикселей сформировать bmp изображение
Добрый день. Имеется массив пикселей char*, из которого необходимо сформировать bmp изображение. В массиве пиксел представлен 12-ти...

Не записывает в файл (увеличить bmp изображение в 2 раза)
Дано задание увеличить bmp изображение в 2 раза. Написал программу, которая по идее, должна делать сие действие (все в классе), но записи в...

Как преобразовать изображение BMP в черно-белое и не только?
Здравствуйте! В общем стоит задача сделать консольный фото редактор, который выполнял бы ряд задач. Не без помощи гугла, часть из них я...

Написать функцию, которая принимает 32 битное целое число и возвращает 16 битное целое число
Помогите написать программу, использующую функцию, которая принимает 32 битное целое число и возвращает 16 битное целое число, состоящее из...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru