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

Создание bmp изображения.(Нужна помощь) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Строки и файлы С++ http://www.cyberforum.ru/cpp-beginners/thread553645.html
Написать программу, которая считывает текст из файла и выводит на экран только те предложения, содержащие введенное с клавиатуры слово. Помогите пожалуйста! ;) P.S если уже было скиньте ссылку на тему :)
C++ в матрице К(7,7) найти минимальный элемент и заменить его на значение среднего в матрице К(7,7) найти минимальный элемент и заменить его на значение среднего арифметического верхней треугольной матрицы http://www.cyberforum.ru/cpp-beginners/thread553620.html
Массивы: объединение двух массивов C++
Решите пожалуйста задачу из задачника Юркина. 4.15. Заданы массивы A(m) и B(n). Получить массив C(m+n), расположив в начале его элементы массива A, а затем - элементы массива B.
Найти все точки с целочисленными координатами, находящиеся внутри эллипса C++
Помогите пожалуйста с задачей 3.3 в Borland из задачника Юркина. Точки внутри эллипса. Для заданных a и b найти все точки с целочисленными координатами, находящиеся внутри эллипса {x}^{2}, {a}^{2}+{y}^{2}, {b}^{2} \leq 1.
C++ Досрочный выход из программы - функция exit http://www.cyberforum.ru/cpp-beginners/thread553607.html
как выйти досрочно из программы exit(0); выдаёт ошибку. 'exit' was not declared in this scope return не поможет.
C++ Подготовить в Блокноте текстовый файл. Написать программу, которая считывает из текстового файла предложения и выводит их на экран в обратном порядке Подготовить в Блокноте текстовый файл. Написать программу, которая считывает из текстового файла предложения и выводит их на экран в обратном порядке. подробнее

Показать сообщение отдельно
Xavier
in god we trust
74 / 74 / 8
Регистрация: 20.04.2012
Сообщений: 201

Создание bmp изображения.(Нужна помощь) - C++

21.04.2012, 15:21. Просмотров 2751. Ответов 6
Метки (Все метки)

Подскажите новичку пожалуйста, я изучаю С++ и пытаюсь создать библиотеку для рисования в файле расширения bmp
но столкнулся с одной проблемой: при занесении информации об изображении и заголовка,
честно говоря не знаю что происходит, есть некая проблема.
По моему оно неправильно заносит эту информацию в файл.
вот сам код создания заголовка и информации об изображении
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
std::ofstream img(name,std::ios::out | std::ios::binary);
    if (!img) {
        std::cout<<"Cannot open the file!!\n";
    }
                          //bitmap заголовок
    img.write((char *) &signature,2);            /*unsigned char[2] "BM" (без символа завершения строки т.е. = 2 байта ,вносил по одному символу)*/
    img.write((char *) &size,4);                   /*unsigned int size -  размер изображения в байтах (при создании изображения 600на 600 получается что он равен 600*600*3+54=1080054) */
    img.write((char *) &reserved1,2);  //unsigned short- зарезервировано =0
    img.write((char *) &reserved2,2);  //unsigned short- зарезервировано =0
    img.write((char *) &pos_of_start,4);  /*unsigned int- позиция начала изображения,смещение=54 в байтах*/
                           ////////bitmap информация об изображении
    img.write((char *) &size_header,4); /*unsigned int -размер информация об изображении =40 в байтах*/
    img.write((char *) &width,4);  //unsigned int - ширина
    img.write((char *) &height,4); //unsigned int- высота
    img.write((char *) &bit_per_pixel,2); //unsigned short- глубина цвета (использую 8)
    img.write((char *) &compression,4); //unsigned int- сжатие =0 
    img.write((char *) &size_of_compression,4); //unsigned int- размер сжатия =0
    img.write((char *) &horizontal_resolution,4);//unsigned int- вертикальное разрешение =0
    img.write((char *) &vertical_resolution,4); //unsigned int- горизонтальное разрешение =0
    img.write((char *) &used_color,4); //unsigned int =0
    img.write((char *) &main_color,4); //unsigned int =0
Также имеется массив пикселей в виде структуры(с тремя составляющими цвета, заполненным например белым). размер массива = 600*600=360000.
после занесения в файл инфы о изображении и заголовке.
заношу в файл сам массив пикселей (изображение):
img.write((char *) pix,bt_img_size); //pix- это тот самый массив пикселей, bt_img_size -это размер изображения в байтах = 600*600*3=1080000
Так вот сам файл bmp создается и закрашивается белым или любым другим цветом не важно. Тут все нормально. Но проблемы начинаются когда я пытаюсь сделать цвет в массиве неоднородным для начала, например половина изображения белая вторая черная.
По логике вещей я должен например первую половину массива (от 0 до 360000/2 ) заполнить белым цветом а вторую черным (от 360000/2 до 360000) но во первых изображение не изменяется, во вторых когда я попытался уменьшить размер "черного" массива(т.е. от 0 до например 40 заполнить черным а от 40 и до конца белым) то изображение изменилось и стало все в полоску.
У меня сложилось такое впечатление что при выполнении img.write((char *) pix,bt_img_size);
он заносит не весь массив из 360000 элементов как надо,а только небольшую его часть. И мне кажется это из -за того что он неправильно формирует заголовок файла и информацию об изображении.
Может кто то знает в чем может быть проблема помогите плиз, натолкните на путь истинный. Буду очень благодарен.
Если надо могу скинуть файл со всем кодом.

Добавлено через 20 часов 21 минуту
В общем разобрался я с проблемой.
Оказывается что там для глубины цвета в 8 бит нужно заполнять палитру цветов чего я не делал.
Я изменил ее на 24 , а для глубины цвета в 24 бита палитру цветов можно не заполнять.
В итоге теперь все работает, библиотеку доделал и с ее помощью можно рисовать в bmp файле
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru