Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кодер формата TIFF, В чем моя ошибка? 
:(
    Опции темы
vanya_z
Дата 30.11.2006, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0414 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.