Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Neolit1819
1 / 1 / 0
Регистрация: 04.04.2011
Сообщений: 7
1

Работа с BMP

04.04.2011, 20:14. Просмотров 655. Ответов 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-файлами (класс "8 битное BMP изображение)
Написать класс &quot;8 битное BMP изображение&quot;.Класс должен содержать 3...

Работа с BMP файлом.
Помогите, с чего начать? Требуется написать программу, которая открывает файл...

Работа с bmp изображением
Всем привет! Интересует вопрос:Каким образом можно считать bmp изображение в...

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

Работа с BMP изображаниями
Доброго дня суток, форумчане! Я начал писать программу чтения BMP-шки в массив....

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

Работа с .bmp файлами
Добрый день, нужно увеличить размер .bmp картинки в n раз. Код не обработан,...

Скриншот, работа с bmp
Возникла необходимость создания скриншота неактивого окна. В результате долгих...

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


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

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

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