Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2013, 19:14   #1
WebbMan
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 168
По умолчанию fopen, fread и прочее переписать через ifstream

Потребовалось переписать следующий код через ifstream
Код:
class LoadTexture
{

	public:
	int W;
	int H;
	unsigned char * Image;
	GLuint index;
	LoadTexture(char *);
};
LoadTexture::LoadTexture(char * path)
{

   FILE *F;
  /* Открываем файл */
  if ((F = fopen(path, "rb")) != NULL)
  {
  /*Перемещаемся в bmp-файле на нужную позицию, и считываем ширину и длинну */
  fseek(F, 18, SEEK_SET);
  fread(&W, 4, 1, F);
  fread(&H, 4, 1, F);
  /* Выделяем память под изображение. Если память не выделилась, закрываем файл и выходим с ошибкой */
  if( ( Image = (unsigned char *)malloc(sizeof(unsigned char) * 3 * W * H ) ) == NULL)
  {
	fclose(F);
	goto error;
  }
  /* Считываем изображение в память по 3 бита, то бишь RGB для каждого пикселя */
  fseek(F, 30, SEEK_CUR);
  fread(Image, 3, W * H, F);
  fclose(F);
  }
  else
  {
	  error:
		printf("Ошибка при загрузке текстуры");
  }
  /*
  ...
  */
  free(Image);

}
//=======================================================
Написал следующее, но в программа выдает ошибки, я думаю что неправильно считываю через ifstream'овский read(,), как в ifstream можно считывать необходимое количество байт аналогично ф-ии fread() ?
Код:
#include <fstream>
class Texture
{
	public:
	int W;
	int H;
	unsigned char * Image;
	GLuint index;
	Texture(char *);
};
Texture::Texture(char * path)
{
   ifstream file;
   file.open(path, ios::binary);
   file.seekg(18, ios::beg);
   file.read((char *)&W, sizeof(int));
   file.read((char *)&H, sizeof(int));
   Image = new (unsigned char *)[3 * W * H ];
   file.seekg(30, ios::cur);
   file.read((char *)Image, 3 * W * H);
   file.close();
   /*
   ...
   */
   delete Image;
}    
//======================================
WebbMan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[вопрос] fread не читает весь файл Tahoma Visual C++ 3 02.10.2012 22:54
Чтение бинарного файла fread Miller-1981 Общие вопросы C/C++ 3 21.08.2012 01:15
fread и бинарное чтение файла kleric C++ Builder 11 02.06.2012 18:21
fread GriFFoN PHP 1 22.10.2011 22:55
Использование fread без блокирующего режима TRIZER PHP 4 20.06.2011 14:02