Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Neolit1819
1 / 1 / 0
Регистрация: 04.04.2011
Сообщений: 7
#1

Работа с BMP - C++

04.04.2011, 20:14. Просмотров 629. Ответов 0
Метки нет (Все метки)

Бобрового дня уважаемые обитатели. Возникло некое недопонимание определения в работе с данным форматом.
Код
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <windows.h>

using namespace std;

int main () 
{
  FILE * pFile;
  long lSize;
  char * buffer;
  size_t result;

  //открываем файл
  pFile = fopen ( "1.bmp" , "rb" );
  if (pFile==NULL) {fputs ("File error",stderr); exit (1);}

  // определяем размер под файл:
  fseek (pFile , 0 , SEEK_END);
  lSize = ftell (pFile);
  rewind (pFile);

  // выделяем память для файла
  buffer = (char*) malloc (sizeof(char)*lSize);
  if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}

  // копируем файл в буфер
  result = fread (buffer,1,lSize,pFile);
  if (result != lSize) {fputs ("Reading error",stderr); exit (3);}

 // копируем из буфера
  BITMAPFILEHEADER    BMP;
  BITMAPINFOHEADER    BMPinfo;
  memcpy(&BMP,buffer,sizeof(BITMAPFILEHEADER));
  memcpy(&BMPinfo,buffer,sizeof(BITMAPINFOHEADER));

  // закрывем файл, освобождаем память
  fclose (pFile);
  free (buffer);
   cout << "bfSize = " << BMP.bfSize << endl; //размер файла
  
  cout << "Width= " << BMPinfo.biWidth << endl; //ширина 
  cout << "Height= " << BMPinfo.biHeight << endl;//высота изображения
 
	return 0;

}
Данный не хитрый код должен выдать инфу о файле 1.bmp(размер, ширину, высоту) если с первым все в поредке то вот с вторым и третьем, что то явно не так. Возможно нужно использовать bfOffBits для опеределения начала непосредсвенно самого битового массива и уже его замерять? Если моя интуиция права то как это реализовать? если нет, то в чем я ошибся? Благодарю

Добавлено через 1 минуту
P.S
сделал изменения
Код:

Код
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <windows.h>

using namespace std;

int main () 
{
  FILE * pFile;
  long lSize;
  char * buffer;
  char * buffer2;
  size_t result;

  unsigned char r;
  
  //открываем файл
  pFile = fopen ( "1.bmp" , "rb" );
  if (pFile==NULL) {fputs ("File error",stderr); exit (1);}

  // определяем размер под файл:
  fseek (pFile , 0 , SEEK_END);
  lSize = ftell (pFile);
  rewind (pFile);

  // выделяем память для файла
  buffer = (char*) malloc (sizeof(char)*lSize);
  if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}

  // копируем файл в буфер
  result = fread (buffer,1,lSize,pFile);
  if (result != lSize) {fputs ("Reading error",stderr); exit (3);}

 // копируем из буфера
  BITMAPFILEHEADER    BMP;
  BITMAPINFOHEADER    BMPinfo;
  memcpy(&BMP,buffer,sizeof(BITMAPFILEHEADER));

  //-------------------------------------------------------
   // определяем размер под файл:
  fseek (pFile , BMP.bfOffBits , SEEK_END);
  lSize = ftell (pFile);
  rewind (pFile);

  // выделяем память для файла
  buffer2 = (char*) malloc (sizeof(char)*lSize);
  if (buffer2 == NULL) {fputs ("Memory error",stderr); exit (2);}

  // копируем файл в буфер
  result = fread (buffer2,1,lSize,pFile);      <---------------------------------------------- скорее всего ошибка(
  if (result != lSize) {fputs ("Reading error",stderr); exit (3);}

  
  
  memcpy(&BMPinfo,buffer2,sizeof(BITMAPINFOHEADER));
//-----------------------------------------------------------------------------
  // закрывем файл, освобождаем память
  
  fclose (pFile);
  
  free (buffer);
  free (buffer2);
  cout << "bfSize = " << BMP.bfSize << endl; //размер файла
  
  cout << "Width= " << BMPinfo.biWidth << endl; //ширина 
  cout << "Height= " << BMPinfo.biHeight << endl;//высота изображения
 
	return 0;

}
добавил выделенную область для второго бувера в который пытаюсь скоприровать как я думаю файл начиная с битового массива, скоприровать не получается(ошибка в помеченной строке), да и не знаю на верном ли я пути =(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2011, 20:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с BMP (C++):

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

Работа с BMP изображаниями - C++
Доброго дня суток, форумчане! Я начал писать программу чтения BMP-шки в массив. Вот ее код: #include &lt;iostream&gt; #include &lt;fstream&gt; ...

Работа с bmp изображением - C++
Всем привет! Интересует вопрос:Каким образом можно считать bmp изображение в матрицу, изменить его(аля инстаграмм), а затем сохранить в...

Скриншот, работа с bmp - C++
Возникла необходимость создания скриншота неактивого окна. В результате долгих поисков, по гуглу я наткнулся на следующий рабочий код: ...

Работа с картинками BMP - C++
Как проверить рисунок типа BMP на количество цветов?

Работа с BMP файлом. - C++
Помогите, с чего начать? Требуется написать программу, которая открывает файл bmp и заменяет в нём каждый 10 байт на байты из текстового...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2011, 20:14
Привет! Вот еще темы с ответами:

Работа с .bmp файлами - C++
Добрый день, нужно увеличить размер .bmp картинки в n раз. Код не обработан, всё находится в Main. Проблема в том, что при вводе n&gt;=2...

Работа с файлами BMP формата - C++
Привет. Такая ситуация... Нужно считать (именно &quot;вручную&quot;) файл bmp формата в объект класса. При этом если в объект ничего не считано то он...

Работа с bmp файлом не получается найти ошибку - C++
Добрый день, знаю что существуют разные способы считывания bmp файла, мне нужно считать таким образом что бы заголовок лежал в одном...

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


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru