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

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

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

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

04.04.2011, 20:14. Просмотров 622. Ответов 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;

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

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

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

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

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

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

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

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

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

Чтение BMP 24 - C++
Здравствуйте! Задача: Нужно зашифровать текстовый файл в картинку формата BMP24. Проблема: Перечитал около десятка страниц форумов но...

Стеганография в BMP - C++
Проект выполняющий метод lsb. В коде ошибки. Не могу понять как исправить. Прошу помочь, может кто разбирается в таких вещах. ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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