vendredi 27 mars 2015

.bmp to .tiff without any libs appart from std I/O


#include<iostream>
#include<fstream>
using namespace std;
typedef unsigned char uchar;
struct tifheader
{
uint16_t identifier;
uint16_t version;
uint32_t offset;
};
struct tiftag
{
uint16_t tagid;
uint16_t datatype;
uint32_t datacount;
uint16_t dataoffset;
};
struct tiffifd
{
uint16_t entries;
tiftag taglist[12];
uint16_t nextoffset;
};

int main()
{
FILE* f=fopen("test.bmp","rb");
if (f==NULL){ cout<<"Argument Exception"; }
uchar header[54];
fread(header, sizeof(uchar),54,f);
int width=*(int*)&header[18];
int height=*(int*)&header[22];
int row=(width*3 +3)&(~3);
uchar d[row*height],temp;
fread(&d,sizeof(uchar),row*height,f);
for(int i=0;i<height*width*3;i++)
{
temp=d[i];d[i]=d[i+2];d[i+2]=temp;
}
fclose(f);
FILE* g=fopen("output.tiff","wb");
tifheader tifh;
tifh.identifier=18761;
tifh.version=42;
tifh.offset=8;
tiffifd ifd;
ifd.entries=12;
ifd.taglist[0].tagid=256;
ifd.taglist[1].tagid=257;
ifd.taglist[2].tagid=258;
ifd.taglist[3].tagid=259;
ifd.taglist[4].tagid=262;
ifd.taglist[5].tagid=273;
ifd.taglist[6].tagid=277;
ifd.taglist[7].tagid=278;
ifd.taglist[8].tagid=279;
ifd.taglist[9].tagid=282;
ifd.taglist[10].tagid=283;
ifd.taglist[11].tagid=296;
ifd.taglist[0].datatype=3;
ifd.taglist[1].datatype=3;
ifd.taglist[2].datatype=3;
ifd.taglist[3].datatype=3;
ifd.taglist[4].datatype=3;
ifd.taglist[5].datatype=3;
ifd.taglist[6].datatype=3;
ifd.taglist[7].datatype=3;
ifd.taglist[8].datatype=3;
ifd.taglist[9].datatype=5;
ifd.taglist[10].datatype=5;
ifd.taglist[11].datatype=3;
ifd.taglist[0].datacount=1;
ifd.taglist[1].datacount=1;
ifd.taglist[2].datacount=3;
ifd.taglist[3].datacount=1;
ifd.taglist[4].datacount=1;
ifd.taglist[5].datacount=1;
ifd.taglist[6].datacount=1;
ifd.taglist[7].datacount=1;
ifd.taglist[9].datacount=1;
ifd.taglist[10].datacount=1;
ifd.taglist[11].datacount=1;
ifd.taglist[0].dataoffset=width;
ifd.taglist[1].dataoffset=height;
ifd.taglist[2].dataoffset=8;
ifd.taglist[3].dataoffset=1;
ifd.taglist[4].dataoffset=2;
ifd.taglist[5].dataoffset=156;
ifd.taglist[6].dataoffset=3;
ifd.taglist[7].dataoffset=height;
ifd.taglist[8].dataoffset=row*height;
ifd.taglist[9].dataoffset=100;
ifd.taglist[10].dataoffset=100;
ifd.taglist[11].dataoffset=3;
ifd.nextoffset=0;
fwrite(&tifh,sizeof(tifheader),1,g);
fwrite(&ifd,sizeof(tiffifd),1,g);
fwrite(d,sizeof(uchar),row*height,g);
fclose(g);
}


I have to convert a .bmp file to .tiff file without using any libs apart from standard libs. It is compiling but tiff file is of wrong format. Please help I don't any problem with the code. The code basicaly takes a bmp file extract its data and writes it into a tiff file with header and IFD. There is only one IFD.


Aucun commentaire:

Enregistrer un commentaire