|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
открытие tiff изображения
Нужно сделать лабораторную по открытию и выводу на экран 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. Соответственно вопрос :где в моей программе ошибка из за которой считываются неверные значения? Последний раз редактировалось Admin, 26.01.2013 в 16:27. |
#2
|
|||
|
|||
Цитата:
Берем библиотеку GraphicEx, подключаем в проект и получаем результат - грузить тифы можно через стандартный Image1.Picture.LoadFromFile. Еще видел модуль Tiff2Bmp, но сам не пробовал, поэтому ничего толкового не скажу. |