Федеральное агентство по образованию РФ
Санкт-Петербургский государственный электротехнический
университет "ЛЭТИ" им. В. И. Ульянова (Ленина)
Кафедра телевидения и видеотехники
Отчёт по лабораторной работе №5
Чтение TIFF - файла
Выполнил: Евстигнеев Е.
Осадчук С.
Группа 0105
Преподаватель: Мончак А.М.
Санкт-Петербург
2011
Задание на лабораторную работу
1. Изменить программу таким образом, чтобы на ТВ экран выводились два изображения: одно - исходное, а другое – негативное.
2. Постановка задачи для ЭВМ.
x |
integer |
|
y |
Integer |
|
col |
Integer |
|
Driv |
integer |
|
Mode |
integer |
|
seektiff |
Integer |
|
Size |
word |
|
Xpal |
word |
|
Ypal |
word |
|
Wdir |
longint |
|
Wx |
longint |
|
Wy |
longint |
|
f |
file |
|
ImageFile1 |
string |
|
Xmax |
string |
|
Ymax |
string |
|
po |
poi |
|
c |
char |
|
NumberofTag |
integer |
|
IFDlength |
integer |
|
I |
integer |
|
Tagtype |
integer |
|
PointTyp |
integer |
|
Comp |
longint |
|
PoinAdr |
longint |
|
Head |
longint |
|
IFDInd |
longint |
|
BegIFD |
longint |
|
TiffHead |
longint absolute TH |
3. Текст программы:
program lab5; {чтение файла > 64 K}
uses Graph,Crt;
const
dx=640; dy=480;
type
Dim = array[1..dx] of byte;
DimPtr = ^Dim;
poi = array[1..dy] of DimPtr;
var
x,y,col,Driv,Mode,seektiff : integer;
Size,Xpal,Ypal : word;
Wdir,Wx,Wy : longint;
f : file;
ImageFile1,Xmax,Ymax : string;
{pal : palettetype;}
po : poi;
c : char;
PROCEDURE HeadRead;
const
TH :array[0..3] of byte=(73,73,42,0);
var
NumberofTag,IFDlength : integer;
i,TagType,PoinTyp : integer;
comp,PoinAdr : longint;
head,IFDInd,BegIFD : longint;
TiffHead : longint absolute TH;
Begin
Blockread(f,head,4); {читаем первые четыре байта -}
{здесь должен быть заголовок TIFF}
{Проверка наличия заговка TIFF - файла}
{Обратить внимание: идет сравнение величин типа LogInt, занимающих
4 байта. Поскольку заголовок в описании констант задан как массив
из 4 байт, чтобы сравнение стало возможным, константу нужно
преобразовать в тип LogInt. Для этого введена переменная TiffHead
типа LogInt, расположенная в памяти по тому же адресу, что и
константа TH (см.в разделе var описание этой переменной и использование
зарезервированного слова absolute)}
if head<>TiffHead then begin
writeln('Eto ne TIFF - fail');
Write('Takoe ne chitau!!!');
halt;
end;
{ Seek(f,8); {переместиться на начало IFD}
seek(f,4);
Blockread(f,head,4); {Хед вроде больше не нужна}
seek(f,head);
Blockread(f,NumberofTag,2); {Число Tag'ов в IFD}
IFDInd:=BegIFD+2; {установили указатель на голову первого Tag'а}
{Читаем Tag'и и присваиваем значения соотвествующим переменным}
for i:=1 to NumberofTag do begin
Blockread(f,TagType,2);
case TagType of
256: begin {размер по горизонтали}
Inc(IFDInd,8);
Seek(f,IFDInd);
Blockread(f,Wx,4);
Inc(IFDInd,4);
end;
257: begin {размер по вертикали}
IFDInd:=IFDInd+8;
Seek(f,IFDInd);
Blockread(f,Wy,4);
Inc(IFDInd,4);
end;
273: begin {определение начала области данных}
IFDInd:=IFDInd+2;
Seek(f,IFDInd);
Blockread(f,PoinTyp,2); {тип записей в таблице указателей-зачем???}
IFDInd:=IFDInd+2;
Seek(f,IFDInd);
Blockread(f,comp,4); {число записей в таблице указателей}
IFDInd:=IFDInd+4; {смещение на область}
Seek(f,IFDInd); {данных Tag'а}
{Разбор содержимого Tag'а.
Если comp=1, то таблицы нет, а единственный указатель -
в самом Tag'е в области данных. Иначе в области данных
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.