Народный учебник по OpenGL


Урок 24. Лексемы, Расширения, Вырезка и Загрузка TGA - часть 5


 

Если все прошло удачно, то мы сравниваем 12 байтов, которые мы прочитали в TGAcompare, с 12 байтами, которые хранятся в TGAheader.   

 

Наконец, если все прошло великолепно, мы попытаемся прочитать следующие 6 байтов в header (важные байты). Если эти 6 байтов недоступны, файл будет закрыт и функция вернет false.

 

  FILE *file = fopen(filename, "rb");         // Открытие TGA файла

  if(file==NULL ||                            // Существует ли файл

     fread(TGAcompare,1,sizeof(TGAcompare),file)!=sizeof(TGAcompare) ||

     // Если прочитаны 12 байтов заголовка

     memcmp(TGAheader,TGAcompare,sizeof(TGAheader))!=0 || // Если заголовок правильный

     fread(header,1,sizeof(header),file)!=sizeof(header)) // Если прочитаны следующие 6 байтов

  {

         if (file == NULL)                      // Если ошибка

                return false;                   // Возвращаем false

         else

         {

                fclose(file);                   // Если ошибка, закрываем файл

                return false;                   // Возвращаем false

         }

  }

 

Если все прошло успешно, то теперь у нас достаточно информации для определения некоторых важных переменных. Первой переменной, которую мы определим, будет width. Мы хотим, чтобы width равнялась ширине TGA изображения. Эту ширину мы найдем, умножив значение, сохраненное в header[1], на 256. Затем мы добавим младший байт, сохраненный в header[0].      

 

height вычисляется таким же путем, но вместо значений сохраненных в header[0] и header[1], мы используем значения, сохраненные в header[2] и header[3]. 

 

После того как мы вычислили ширину и высоту, мы должны проверить, что ширина и высота больше 0. Если ширина или высота меньше или равна нулю, файл будет закрыт и функция вернет false.      

 

Также мы должны удостовериться, что TGA файл является 24 или 32 битным изображением. Это мы сделаем, проверив значение, сохраненное в header[4]. Если оно не равно ни 24, ни 32 (бит), то файл будет закрыт и функция вернет false.




- Начало -  - Назад -  - Вперед -