Новичок
Профиль
Группа: Участник
Сообщений: 1
Регистрация: 30.11.2006
Репутация: нет Всего: нет
|
Мне нужно написать на языке Си кодер формата tiff. Попробовал написать программу создающую файл tiff, в котором находится изображение RGB 128x128. Но что-то не получается. Прошу помочь найти причину или готовые примеры по аналогичной теме. | Код | #include <iostream.h> #include <stdio.h> #include <conio.h> #include <stdlib.h>
void main() {FILE *stream; stream=fopen("tif.tif","wb"); //HEADER struct Header{ short BYTE_ORDER; //Порядок следования файлов short VERSION; //Hомер версии TIFFa long IFDOffset; //Адрес первой директории TAGов }; struct Header s;
s.BYTE_ORDER=0x4949; //Порядок следования файлов s.VERSION=0x002A; //Hомер версии TIFFa s.IFDOffset=8; //Адрес первой директории TAGов
fwrite(&s,sizeof(s),1,stream); //IFD short NumDirEntries=12; // Количество тегов в IFD fwrite(&NumDirEntries,sizeof(NumDirEntries),1,stream); //short TagList[]; // Массив тегов struct IFD{ short Tagid; // Идентификатор тега long Datatype; // Скалярный тип элементов данных short DataCount; // Количество элементов данных тега long DataOffset; // Смещение элементов данных }; struct IFD c;
c.Tagid=256; // Идентификатор тега ImageWidth c.Datatype=3; // Скалярный тип элементов данных c.DataCount=1; // Количество элементов данных тега c.DataOffset=128; // Смещение элементов данных
fwrite(&c,sizeof©,1,stream);
c.Tagid=257; // Идентификатор тега ImageLength c.Datatype=3; // Скалярный тип элементов данных c.DataCount=1; // Количество элементов данных тега c.DataOffset=128; // Смещение элементов данных
fwrite(&c,sizeof©,1,stream);
c.Tagid=258; // Идентификатор тега BitsPerSample c.Datatype=3; // Скалярный тип элементов данных c.DataCount=1; // Количество элементов данных тега c.DataOffset=8,8,8; // Смещение элементов данных
fwrite(&c,sizeof©,1,stream);
c.Tagid=259; // Идентификатор тега Compression c.Datatype=3; // Скалярный тип элементов данных c.DataCount=1; // Количество элементов данных тега c.DataOffset=1; // Смещение элементов данных
fwrite(&c,sizeof©,1,stream);
c.Tagid=262; // Идентификатор тега PhotometricInterpretation c.Datatype=3; // Скалярный тип элементов данных c.DataCount=1; // Количество элементов данных тега c.DataOffset=2; // Смещение элементов данных
fwrite(&c,sizeof©,1,stream);
c.Tagid=273; // Идентификатор тега StripOffsets c.Datatype=3; // Скалярный тип элементов данных c.DataCount=1; // Количество элементов данных тега c.DataOffset=174; // Смещение элементов данных
fwrite(&c,sizeof©,1,stream);
c.Tagid=277; // Идентификатор тега SamplesPerPixel c.Datatype=3; // Скалярный тип элементов данных c.DataCount=1; // Количество элементов данных тега c.DataOffset=3; // Смещение элементов данных
fwrite(&c,sizeof©,1,stream);
c.Tagid=278; // Идентификатор тега RowsPerStrip c.Datatype=3; // Скалярный тип элементов данных c.DataCount=1; // Количество элементов данных тега c.DataOffset=4; // Смещение элементов данных
fwrite(&c,sizeof©,1,stream);
c.Tagid=279; // Идентификатор тега StripByteCounts c.Datatype=3; // Скалярный тип элементов данных c.DataCount=1; // Количество элементов данных тега c.DataOffset=128*12; // Смещение элементов данных
fwrite(&c,sizeof©,1,stream);
c.Tagid=282; // Идентификатор тега XResolution c.Datatype=5; // Скалярный тип элементов данных c.DataCount=1; // Количество элементов данных тега c.DataOffset=158; // Смещение элементов данных
fwrite(&c,sizeof©,1,stream);
c.Tagid=283; // Идентификатор тега YResolution c.Datatype=5; // Скалярный тип элементов данных c.DataCount=1; // Количество элементов данных тега c.DataOffset=166; // Смещение элементов данных
fwrite(&c,sizeof©,1,stream);
c.Tagid=296; // Идентификатор тега ResolutionUnit c.Datatype=3; // Скалярный тип элементов данных c.DataCount=1; // Количество элементов данных тега c.DataOffset=2; // Смещение элементов данных
fwrite(&c,sizeof©,1,stream); int g; g=96; fwrite(&g,sizeof(int),1,stream); g=1; fwrite(&g,sizeof(int),1,stream); g=96; fwrite(&g,sizeof(int),1,stream); g=1; fwrite(&g,sizeof(int),1,stream);
long NextIFDOffset=0; // Смещение следующей IFD
fwrite(&NextIFDOffset,sizeof(NextIFDOffset),1,stream);
int b=0x80; for(int k=0;k<3;k++) for(int i=0;i<128;i++) for(int j=0;j<128;j++) fwrite(&b,sizeof(char),1,stream);
fclose(stream); }
|
M alexeis1 | Модератор: У нас на форуме есть возможность делать подсветку кода, при промощи кнопки "КОД" справа выше поля ввода | Это сообщение отредактировал(а) alexeis1 - 30.11.2006, 10:49
|