Нужно сделать лабораторную по открытию и выводу на экран tiff-изображения.
Вот фрагмент моей программы который пока считывает первые несколько байт из файла:
Код:
AssignFile(fl, OpenDialog1.FileName);
reset(fl, 1);
blockread(fl, bArray, 2);//читаем идентификатор
fZag.identifier:= inttohex(barray[1],1)+inttohex(barray[2],1);
blockread(fl, bArray, 2);//версия
fZag.Version:=bArray[1]+ bArray[2];
blockread(fl, bArray, 4); //смещение 1-го каталога
fZag.IFDoffset:=(bArray[1])+(bArray[2]shl 8)+(bArray[3] shl 8*2)+(bArray[4]shl 8*3 );
pos:= FilePos(fl)+fZag.IFDoffset;
blockread(fl, bArray, fZag.IFDoffset);//смещаемся к 1 каталогу
ShowMessage('Заголовок файла:'+Chr(13)+
Chr(13)+'Идентификатор: '+fzag.identifier+'h'+
Chr(13)+'Версия: '+IntToStr(fZag.version)+
Chr(13)+'Cмещение 1-го католога: '+inttostr(fZag.IFDoffset)) ;
blockread(fl, bArray,2);
NumDirEntries:=(barray[1])+(barray[2]shl 8);//количество тегов в каталоге
ShowMessage('numdirentries:'+inttostr(numdirentries));
blockread(fl, bArray,2); //идентификатор тега
taglist.tagID:=(barray[1])+(barray[2]shl 8);
ShowMessage('taglist:'+inttostr(taglist.tagID));
blockread(fl, bArray,2);//тип данных
taglist.datatype:=(barray[1])+(barray[2]shl 8);
ShowMessage('datatype:'+inttostr(taglist.datatype));
blockread(fl, bArray,4);//количество элементов
taglist.datacount:=(barray[1])+(barray[2]shl 8)+(barray[3]shl 8*2)
+(barray[4]shl 8*3);
ShowMessage('datacount:'+inttostr(taglist.datacount));
blockread(fl, bArray,4);//смещение данных
taglist.NextIFDOffset:=(barray[1])+(barray[2]shl 8)+(barray[3]shl 8*2)
+(barray[4]shl 8*3);
ShowMessage('NextIFDOffset:'+inttostr(taglist.NextIFDOffset));
Админ: Пользуемся тегами для оформления кода!
Сначала открываем файл,считываем идентификатор.В лабораторной он всегда равен 4949 т.е. порядок байтов "младший в младшем".
Далее читаем версию она тоже везде одинакова и равна 42.Далее считываем смещение к 1 катологу.В том изображении которое я открывал смещение=20.Смещаемся на это значение.Считываем количество тегов в каталоге.Вот тут уже начинается ошибка в моем случае количество тегов в каталоге=0,далее идентификатор тега=0 и тип данных тоже=0,количество элементов данных=2304,смещение данных=1.
Соответственно вопрос :где в моей программе ошибка из за которой считываются неверные значения?