Важная информация
Показано с 1 по 3 из 3

Тема: Загрузка PCXfile

  1. #1 Загрузка PCXfile 
    Новичок
    Регистрация
    31.03.2012
    Сообщений
    3
    Сказал(а) спасибо
    1
    Поблагодарили 0 раз(а) в 0 сообщениях
    скажите плз, может кто знает.....нашёл код, где идет загрузка pcx файла

    unsigned char *LoadPCXFile(char *filename, PCXHEADER *pcxHeader)
    {
    int idx = 0;
    int c;
    int i;
    int numRepeat;
    FILE *filePtr;
    int width;
    int height;
    unsigned char *pixelData;
    unsigned char *paletteData;

    fopen_s(&filePtr, filename, "rb");

    if (filePtr == NULL)
    return NULL;

    // retrieve first character; should be equal to 10
    c = getc(filePtr);
    if (c != 10)
    {
    fclose(filePtr);
    return NULL;
    }

    // retrieve next character; should be equal to 5
    c = getc(filePtr);
    if (c != 5)
    {
    fclose(filePtr);
    return NULL;
    }

    rewind(filePtr);

    // read 4 characters of data to skip
    fgetc(filePtr);
    fgetc(filePtr);
    fgetc(filePtr);
    fgetc(filePtr);
    .....
    пытался понять, почему мы извлекаем сначало 10 characters, а затем 5 и 4. В структуре самого формата я насчитал всего 18 свойств. или я не туда полез?????? подскажите пожалуйста, если знаете о чем речь идет
    Ответить с цитированием  
     

  2. #2  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Дело в том, что не обязательно считывать полностью весь заголовок, чтобы прочитать файл формата PCX. Достаточно считать лишь отдельные и самые нужные поля. Смотрите. Следующий код:
    Код :
    // retrieve first character; should be equal to 10
    c = getc(filePtr);
    if (c != 10)
    {
    fclose(filePtr);
    return NULL;
    Считывает не 10 байт, как вы написали, а только один, самый первый байт. Если значение этого байта не 10, то нужно вернуть NULL и завершить функцию, потому-что, скорее всего, файл, который был открыт, не был файлом в формате PCX. У PCX-файлов первый байт должен иметь значение 10.
    Следующий код:
    Код :
    // retrieve next character; should be equal to 5
    c = getc(filePtr);
    if (c != 5)
    {
    fclose(filePtr);
    return NULL;
    }
    Читает второй байт из файла. Во втором байте располагается значение версии PCX-файла. Если значение не равно 5, то функция снова завершается, ибо программа рассчитана на работу только с PCX-файлами версии 3.0 (ее код как-раз и равен 5).
    А вот тут:
    Код :
    // read 4 characters of data to skip
    fgetc(filePtr);
    fgetc(filePtr);
    fgetc(filePtr);
    fgetc(filePtr);
    просто читаются следующие 4 байта из файла, но их значение нигде не используется - читаются затем, как я понимаю, чтобы просто прокрутить указатель позиции файла на нужный байт. Третьим байтом идет информация о сжатии PCX, четвертым - информация о глубине цвета, пятым и шестым уже идет одно из значений размера изображения. Это довольно важная информация, и я сам не понимаю, почему автор кода пропускает ее.
    Дружба-магия-радость!
    Ответить с цитированием  
     

  3. Пользователь сказал cпасибо:

    Павел (01.04.2012)

  4. #3  
    Новичок
    Регистрация
    31.03.2012
    Сообщений
    3
    Сказал(а) спасибо
    1
    Поблагодарили 0 раз(а) в 0 сообщениях
    Спасибо огромное ))))) я все понял, нашёл описание формата pcx [Ссылки могут видеть только зарегистрированные пользователи. ] и с вашими комментариями я все просто разложил и понял.
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Загрузка DLL из памяти
    от stabud в разделе FreeBasic
    Ответов: 1
    Последнее сообщение: 05.01.2013, 12:57
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •