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

Считать BMP изображение в динамическую память - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Что такое шаблоны функций? http://www.cyberforum.ru/cpp-beginners/thread1244255.html
Люди обясните пожалуйста шаблоны функций На заннятиях чучуть провтыкал помогите вы буду благодарен!!
C++ Объяснить линейный поиск в массиве и сортировка массива Рябята кому не трудно кто может обяснить линейный поиск в масиве и сортировку масива Не очень понял как на парах обясняли обясните вы пожалуйста буду благодарен! http://www.cyberforum.ru/cpp-beginners/thread1244252.html
Вычислите значения полиномов Лагерра Ln(x): C++
Ln(x)=\begin{cases}1 & \text{ if } n=0 \\ -x + 1 & \text{ if } n=1 \\ x^2-4x+2 & \text{ if } n=2 \\ -x^3+9x^2-18x+6 & \text{ if } n=3 \\ x^4-16x^3+72x^2-96x+24 & \text{ if } n=4 \end{cases} x = 0.5. Помогите пожалуйста!!
Cохранение очень большого массива в текстовый файл C++
Помогите пожалуйста. Мне требуется сохранить карту в своей игре в текстовый файл. Класс карты: class cMap { public: cRegion regions; }; class cRegion { public:
C++ Написать функцию, которая сортирует переданный ей динамический массив "быстрой" сортировкой http://www.cyberforum.ru/cpp-beginners/thread1244219.html
#include <iostream> #include <vector> using namespace std; void qSort( vector <int> &A,int nStart, int nEnd) { int L,R,c,X; if (nStart>=nEnd) return; L=nStart; R=nEnd; X=A; while (L<=R)
C++ Как вывести фигуру в окне? Всем доброго дня. Я знаком с C++ довольно поверхностно, но на уровне консольного приложения знаю, возможно, все. Начал изучать DirectX по книгам Горнакова С.Г., для пущего реализма поставил VC++6.0 и DX9 под WinXP - все, как у него. И все же постоянно приходится адаптировать код, чтобы избавиться от ошибок. До сего момента справлялся, однако теперь в тупике. Следующий код... подробнее

Показать сообщение отдельно
Harrm
0 / 0 / 0
Регистрация: 18.08.2014
Сообщений: 9
19.08.2014, 11:36  [ТС]     Считать 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
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main(){
 
    const unsigned short
        IMAGE_WIDTH = 72,
        IMAGE_HEIGHT = 102,
 
        FILE_HEADER_SIZE = 14,
        IMAGE_HEADER_SIZE = 40;
 
    ifstream is("image.bmp", std::ios::binary);     //Файл
 
    //У каждого файла bitmap есть заголовок из 14 байт.
    unsigned char signature[2] = { 'B', 'M' };                                              //Строка BM (в Windows).
    is.read(reinterpret_cast<char*> (signature), sizeof(signature));
    cout << "signature " << signature[0] << signature[1] << endl;
    
    unsigned int fileSize = FILE_HEADER_SIZE + IMAGE_HEADER_SIZE + IMAGE_WIDTH * IMAGE_HEIGHT * 4;  //Размер файла в байтах.
    is.read(reinterpret_cast<char*> (&fileSize), sizeof(fileSize));
    cout << "fileSize " << fileSize << endl;
    
    unsigned int reserved = 0;                                                      //Зарезервированное поле. Нужно инициализировать нулём.
    is.read(reinterpret_cast<char*> (&reserved), sizeof(reserved));
    cout << "reserved " << reserved << endl;
    
    unsigned int offset = FILE_HEADER_SIZE + IMAGE_HEADER_SIZE;                             //Адрес с которого начинается собственно изображение.
    is.read(reinterpret_cast<char*> (&offset), sizeof(offset));                             //Или по другому - смещение к началу изображения.
    cout << "offset " << offset << endl;
 
    
    //Поля заголовка Windows V3
    unsigned int headerSize = IMAGE_HEADER_SIZE;                          //Размер заголовка. Всегда задаётся 40 байт.
    is.read(reinterpret_cast<char*> (&headerSize), sizeof(headerSize));
    cout << "\n headerSize " << headerSize << endl;
    
    unsigned int dimensions[2] = { IMAGE_WIDTH, IMAGE_HEIGHT };           //Ширина и высота изображения в пикселях.
    is.read(reinterpret_cast<char*> (dimensions), sizeof(dimensions));
    cout << "dimensions " << dimensions[0] << dimensions[1] << endl;
    
    unsigned short colorPlanes = 1;                              //Данное поле всегда содержит единицу.
    is.read(reinterpret_cast<char*> (&colorPlanes), sizeof(colorPlanes));
    cout << "colorPlanes " << colorPlanes << endl;
    
    unsigned short bpp = 32;                                     //Глубина цвета - количество битов в пикселе.
    is.read(reinterpret_cast<char*> (&bpp), sizeof(bpp));
    cout << "bpp " << bpp << endl;
    
    unsigned int compression = 0;                                     //Метод сжатия.
    is.read(reinterpret_cast<char*> (&compression), sizeof(compression));
    cout << "compression " << compression << endl;
    
    unsigned int imgSize = IMAGE_WIDTH * IMAGE_HEIGHT * 4;                //Размер изображения без учёта размера заголовков.
    is.read(reinterpret_cast<char*> (&imgSize), sizeof(imgSize));         
    cout << "imgSize " << imgSize << endl;
    
    unsigned int resolution[2] = { 2795, 2795 };                          //Горизонтальное и вертикальное количество пикселей в одном метре
    is.read(reinterpret_cast<char*> (resolution), sizeof(resolution));
    cout << "resolution " << resolution << endl;
    
    unsigned int pltColors = 0;                                  //Количество цветов в палитре.
    is.read(reinterpret_cast<char*> (&pltColors), sizeof(pltColors));
    cout << "pltColors " << pltColors << endl;
    
    unsigned int impColors = 0;                                  //Количество важных цветов в палитре.
    is.read(reinterpret_cast<char*> (&impColors), sizeof(impColors));
    cout << "impColors " << impColors << endl;
 
 
    char* image = new char [dimensions[1]*dimensions[0]*4];
 
    char r = 0, g = 0, b = 0, x = 0;
 
    for (int i = 0; i < dimensions[1]; ++i)
    {
        for (int j = 0; j < dimensions[0]; ++j)
        {
            is.read(reinterpret_cast<char*>(&b), sizeof(b));
            cout << "b = " << b << endl;
            is.read(reinterpret_cast<char*>(&g), sizeof(g));
            cout << "g = " << g << endl;
            is.read(reinterpret_cast<char*>(&r), sizeof(r));
            cout << "r = " << r << endl;
            is.read(reinterpret_cast<char*>(&x), sizeof(x));
            cout << "x = " << x << endl;
 
            image[(dimensions[0] * i + j) * 4]     = b;
            image[(dimensions[0] * i + j) * 4 + 1] = g;
            image[(dimensions[0] * i + j) * 4 + 2] = r;
            image[(dimensions[0] * i + j) * 4 + 3] = 0;
        }
    }
 
    is.close();
 
    delete[] Homework_image;
    return 0;
}
 
Текущее время: 06:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru