我画好了一幅图,图的格式可以是bmp,jpg,wmf等,需要保存成tiff格式
且可以选图中一个区域保存
请给出例子或原码!

解决方案 »

  1.   

    http://www.codeproject.com/bitmap/BitmapsToTiffs.asp
      

  2.   

    http://www.codeproject.com/bitmap/cximage.asp
      

  3.   

    TIFF: Tagged Image File Format方法: 用GDI+
    做法:
    首先在StdAfx.h中静态调用diplus.lib,即由编译系统完成对DLL的加载,应用程序结束时卸载DLL的编码。如下: #ifndef ULONG_PTR#define ULONG_PTR unsigned long*#include "GdiPlus.h"using namespace Gdiplus;#pragma comment(lib, "gdiplus.lib")#endif
     在类的头文件中定义,以下成员变量,用来初始化GDI+的使用和结束使用。
     GdiplusStartupInput m_gdiplusStartupInput;        ULONG_PTR m_gdiplusToken;
     
       然后在OnCreate()函数中加入初始化GDI+的函数:
     GdiplusStartup(&m_gdiplusToken, &m_gdiplusStartupInput, NULL);      
      在OnDestroy()函数中加入结束GDI+使用的函数:
      GdiplusShutdown(m_gdiplusToken); 
       接着定义转换函数
     BOOL MBmpToMImage(CMemFile& cbfBmp, CMemFile& cbfImage, CString strType) 
       其中:  CMemFile& cbfBmp表示原位图文件;  CMemFile& cbfImage表示转换后的图形文件;  CString strType表示转换的图片类型。  该函数中主要的处理为以下几步:  1、将原位图文件转换为IStream;2、定义Image类实例,并使用第1步获得的IStream初始化;  3、获取转换的图片类型的CLSID;  4、将Image以转换的图片类型保存到IStream中;  5、将IStream转换为CMemFile内存文件(也可为CFile)。  详细代码如下:
     BOOL MBmpToMImage(CMemFile& cbfBmp, CMemFile& cbfImage, CString strType){       int iBmpSize = cbfBmp.GetLength();       HGLOBAL hMemBmp = GlobalAlloc(GMEM_FIXED, iBmpSize);       if (hMemBmp == NULL) return FALSE;       IStream* pStmBmp = NULL;       CreateStreamOnHGlobal(hMemBmp, FALSE, &pStmBmp);       if (pStmBmp == NULL)        {              GlobalFree(hMemBmp);              return FALSE;       }       BYTE* pbyBmp = (BYTE *)GlobalLock(hMemBmp);       cbfBmp.SeekToBegin();       cbfBmp.Read(pbyBmp, iBmpSize);       Image* imImage = NULL;       imImage = Image::FromStream(pStmBmp, FALSE);       if (imImage == NULL)        {              GlobalUnlock(hMemBmp);
     
     GlobalFree(hMemBmp);              return FALSE;       }       USES_CONVERSION;       CLSID clImageClsid;       GetImageCLSID(A2W("image/”+strType.GetBuffer(0)), &clImageClsid);       HGLOBAL hMemImage = GlobalAlloc(GMEM_MOVEABLE, 0);       if (hMemImage == NULL)       {              pStmBmp->Release();              GlobalUnlock(hMemBmp);              GlobalFree(hMemBmp);              if (imImage != NULL) delete imImage;              return FALSE;       }       IStream* pStmImage = NULL;       CreateStreamOnHGlobal(hMemImage, TRUE, &pStmImage);       if (pStmImage == NULL)       {              pStmBmp->Release();              GlobalUnlock(hMemBmp);              GlobalFree(hMemBmp);              GlobalFree(hMemImage);              if (imImage != NULL) delete imImage
    return FALSE;       }            imImage->Save(pStmImage, &clJpgClsid);       if (pStmImage == NULL)        {              pStmBmp->Release();              pStmImage>Release();              GlobalUnlock(hMemBmp);              GlobalFree(hMemBmp);              GlobalFree(hMemImage;              if (imImage != NULL) delete imImage;              return FALSE;       }       LARGE_INTEGER liBegin = {0};       pStmImage->Seek(liBegin, STREAM_SEEK_SET, NULL);       BYTE* pbyImage = (BYTE *)GlobalLock(hMemImage);       cbfImage.SeekToBegin();       cbfImage.Write(pbyImage, GlobalSize(hMemImage));       if (imImage != NULL) delete imImage;       pStmBmp->Release();       pStmImage->Release();       GlobalUnlock(hMemBmp);       GlobalUnlock(hMemImage);       GlobalFree(hMemBmp);       GlobalFree(hMemImage);       return TRUE;}
    此方法支持图片转换的类型:bmp、dib、png、gif、jpeg/jpg、tiff、emf等
      

  4.   

    http://www.codeproject.com/bitmap/BitmapsToTiffs.asp