打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
bmp转tiff

       if(!ISbmp(inputfile))

       {

              return      FALSE;

       }

       if(!IStif(outputfile))

              returnFALSE;

 

  

 

 

       BITMAPFILEHEADERbh;

       CFilefile;

       file.Open("D:\\sunchao\\test\\Debug\\abc.bmp",CFile::modeRead,NULL);

       file.Read(&bh,sizeof(BITMAPFILEHEADER));

       DWORDdwSize = sizeof(BITMAPINFO) + 256*sizeof(RGBQUAD);

      

       LPBITMAPINFOpInfo = (BITMAPINFO*)new BYTE[sizeof(BITMAPINFO) + 256*sizeof(RGBQUAD)];

       file.Read(pInfo,sizeof(BITMAPINFO)+256*sizeof(RGBQUAD));

      

       intheight = pInfo->bmiHeader.biHeight;

       intwidth = pInfo->bmiHeader.biWidth;

      

       intdwBytePerLine = 4*(width * pInfo->bmiHeader.biBitCount + 31)/32;

      

       intnSize = pInfo->bmiHeader.biSizeImage;

      

       if(nSize  == 0)

       {

              nSize= height * dwBytePerLine;

       }

      

       LPBYTEpData = new BYTE[nSize+32];

       file.Seek(bh.bfOffBits,SEEK_SET);

       file.Read(pData,nSize);

       file.Close();

      

       //把C盘上的位图文件a.bmp读出来,把信息部分存到pInfo中,数据部分存到pData中,供下面使用。

       //然后成一个新的TIFF文件 c:\\a.tif,把上面信息写进来。

       //下面的操作和上面读出数据相反,不做过多解释

      

//     uint32    width, height;

       uint16    depth = 8;       

      

       TIFF*out = TIFFOpen("D:\\sunchao\\test\\Debug\\abc.tif","w");//打开TIFF文件

      

      

       TIFFSetField(out,TIFFTAG_SUBFILETYPE, FILETYPE_PAGE);//表示存的图是多帧的

       intnCur=1;//当前的帧数

       intnTotal=1;//总帧数

       TIFFSetField(out,TIFFTAG_PAGENUMBER, nCur,nTotal);//设置该帧属性

      

       width= pInfo->bmiHeader.biWidth;

       height= pInfo->bmiHeader.biHeight;

      

       TIFFSetField(out,TIFFTAG_IMAGEWIDTH, width);

       TIFFSetField(out,TIFFTAG_IMAGELENGTH, height);

       TIFFSetField(out,TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);

       TIFFSetField(out,TIFFTAG_SAMPLESPERPIXEL, 1);

       TIFFSetField(out,TIFFTAG_BITSPERSAMPLE, depth);

       TIFFSetField(out,TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);

      

       uint16    photometric = PHOTOMETRIC_MINISBLACK;//表示存放格式为RGB

       TIFFSetField(out,TIFFTAG_PHOTOMETRIC, photometric);

       TIFFSetField(out,TIFFTAG_ROWSPERSTRIP,height);

      

      

      

       uint16compression = COMPRESSION_LZW;//

       TIFFSetField(out,TIFFTAG_COMPRESSION, compression);

       //TIFF按LZH压缩

      

       uint32  size;

       char*scanbuf;

       size= ((width * pInfo->bmiHeader.biBitCount + 31) /32)*4;

       scanbuf= (char *) _TIFFmalloc(size);

       intnBitsPerPixel = pInfo->bmiHeader.biBitCount;

       BYTE* bits;

       for(intnLines = 0; nLines < height; nLines++)

       {

 

              bits= pData +width*height- nLines * width;

              if   (TIFFWriteScanline(out,bits,   nLines,  0)==-1)  return FALSE;

       }

      

       _TIFFfree(scanbuf);

       TIFFWriteDirectory(out);

       deletepData;

       pData= NULL;

       deletepInfo;

       pInfo= NULL;

       //到这里,向TIFF文件加了一张图,如再加下一张的话,循环操作

      

       TIFFClose(out);

       returnTRUE;


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
C# 将多个图片合并成TIFF文件的两种方法(续集)
各种图片格式的定义及说明
位图文件(BMP)格式分析以及程序实现
将屏幕保存为图片 将当前MFC程序保存为图片
MFC中BMP图片旋转任意角度、用于绘制模拟时钟表针
android上用C语言读取fb0实现截屏,并保存为rgb565的bmp
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服