Не могу импортировать файл JPEG в Qt - PullRequest
1 голос
/ 09 декабря 2011

Моя задача - реализовать кодировщик / декодер JPEG в Qt.Я должен обрабатывать маркеры JPEG (например, 0xFFC4, который является началом таблицы Хаффмана) и данные между маркерами.Я открываю свой файл jpeg, используя класс QFile.Результат отладки показан на рисунке ниже.Как вы можете видеть, значение в маркер [0] равно -1/255, а маркер [1] равен -40/216, а оператор if никогда не верен, я не знаю почему?Код следующий:

try{
        char markers[2];
        char TableData[64];
        QFile *file= new QFile( "NovaSlika.jpeg");
        if(file->open(QFile::ReadOnly )){
            while(file->read((char*)markers,sizeof(markers))){

                if(markers[0]=='255' && markers[1]=='216'){//FF i C4
                    char TableLength[2];
                    char tableMetaData;
                    file->read((char*)TableLength,sizeof(TableLength));//Read table length
                    file->read((char*)tableMetaData,sizeof(tableMetaData));//Read metadata
                    file->read((char*)TableData,sizeof(TableData));//Read data
                    break;
                }

            }
        }

Изображение процесса отладки: здесь

1 Ответ

1 голос
/ 09 декабря 2011

Будьте внимательны в своем состоянии while: read () возвращает

  • 0, если данных больше нет.
  • -1, если есть ошибка, например, чтение за концом.
  • # байты читаются иначе.

Вы, вероятно, должны сделать:

while( file->read( (char*)markers, sizeof(markers) ) == 2 ) 

И эта строка тоже не правильна:

markers[0]=='255' && markers[1]=='216'

Избавьтесь от этих одинарных кавычек.(-Стена на gcc предупредила бы вас об этом).Должно быть:

markers[0]==255 && markers[1]==216
...