| 发表于:2007-11-09 16:47:174楼 得分:30 |
没处理多多帧的, 不过帮你找了一个 --------------------------------------------------------------- 用gdi+的creating and saving a multiple-frame image --------------------------------------------------------------- 下载这个库 http://www.vchelp.net/vchelp/file2002_4/flib.asp?type_id=18&class_id=1&cata_id=12&article_id=907 fcimage类里面有下面几个成员函数能够完成你的功能: 函数原型: bool loadgif (pctstr resname, pctstr restype) bool loadgif (pctstr szfilename) 说明: 从说明或文件中读入第一帧。 函数原型: bool loadgifframe (int inumber) int loadgifnextframe () 说明: inumber :[1..wtotalframe] 此两函数调用前,必须先调用loadgif 。 函数原型: bool savegif (pctstr szfilename, bool bgolpal = true) bool addgifframe (pctstr szfilename, bool bgolpal = false, dword dwdelay = 100, dword dwtransindex = -1) 说明: bgolpal :是否使用此帧调色板作为全局调色板。 dwdelay :为两帧间延时毫秒数。 dwtransindex :为透明色索引,-1表示无透明色 。 --------------------------------------------------------------- #include <windows.h> #include <gdiplus.h> #include <stdio.h> using namespace gdiplus; int getencoderclsid(const wchar* format, clsid* pclsid); // helper function int main() { // initialize gdi+. gdiplusstartupinput gdiplusstartupinput; ulong_ptr gdiplustoken; gdiplusstartup(&gdiplustoken, &gdiplusstartupinput, null); encoderparameters encoderparameters; ulong parametervalue; status stat; // an encoderparameters object has an array of // encoderparameter objects. in this case, there is only // one encoderparameter object in the array. encoderparameters.count = 1; // initialize the one encoderparameter object. encoderparameters.parameter[0].guid = encodersaveflag; encoderparameters.parameter[0].type = encoderparametervaluetypelong; encoderparameters.parameter[0].numberofvalues = 1; encoderparameters.parameter[0].value = ?metervalue; // get the clsid of the tiff encoder. clsid encoderclsid; getencoderclsid(l"image/tiff", &encoderclsid); // create four image objects. image* multi = new image(l"shapes.bmp"); image* page2 = new image(l"cereal.gif"); image* page3 = new image(l"iron.jpg"); image* page4 = new image(l"house.png"); // save the first page (frame). parametervalue = encodervaluemultiframe; stat = multi-> save(l"multiframe.tif", &encoderclsid, &encoderparameters); if(stat == ok) printf("page 1 saved successfully.\n"); // save the second page (frame). parametervalue = encodervalueframedimensionpage; stat = multi-> saveadd(page2, &encoderparameters); if(stat == ok) printf("page 2 saved successfully.\n"); // save the third page (frame). parametervalue = encodervalueframedimensionpage; stat = multi-> saveadd(page3, &encoderparameters); if(stat == ok) printf("page 3 saved successfully.\n"); // save the fourth page (frame). parametervalue = encodervalueframedimensionpage; stat = multi-> saveadd(page4, &encoderparameters); if(stat == ok) printf("page 4 saved successfully.\n"); // close the multiframe file. parametervalue = encodervalueflush; stat = multi-> saveadd(&encoderparameters); if(stat == ok) printf("file closed successfully.\n"); delete multi; delete page2; delete page3; delete page4; gdiplusshutdown(gdiplustoken); return 0; --------------------------------------------------------------- 这有一个非常好的,而且有说明: http://www.codeproject.com/bitmap/cximage.asp 先免费注册个id,然后登陆下载。 | | |
|