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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Backup http://www.cyberforum.ru/cpp-beginners/thread270128.html
Дайте ссылочку на код простенькой программы резервного копирования на С++, можно и на С. Никак не могу примеры найти , а нужно сделать нечто подобное.
C++ Сжать массив отбрасыванием нулевых элементов помогите пожалуйста создать динамический массив и Сжать заданный массив b1, b2,...,bm отбрасыванием нулевых элементов! http://www.cyberforum.ru/cpp-beginners/thread270122.html
не могу решить zadachu в С++ C++
помогите пожалуйста решить задачку,оч нужно((((((
C++ Статические массивы
int a; cout << sizeof(a) << endl; cout << a << endl; Добрый день. Почему выводится, что sizeof(a)=16 байт. a же это адрес, т.е. = 4 байта, а не размер массива. P.S. буду рад за...
C++ ПОПАДАНИЕ В ЗАШТРИХОВАННУЮ ОБЛАСТЬ http://www.cyberforum.ru/cpp-beginners/thread270097.html
СОСТАВИТЬ ПРОГРАММУ
C++ Класс "Матрицы" Доброго времени суток. Прошу помочь вот в таком задании : описать класс , реализующий тип данных "вещественная матрица порядка 2" и работу с ним , а именно : сложение , вычитание , умножение на... подробнее

Показать сообщение отдельно
Neolit1819
1 / 1 / 0
Регистрация: 04.04.2011
Сообщений: 7

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

04.04.2011, 20:14. Просмотров 631. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru