![]() |
【转帖】previewicon
previewicon
previewicon in old code written around opendwg i used the following two functions to find and display a preview of the dwg file: // determin if there is a bmp for preview. numbytes = adbmpsizefromfile(((void*)((const char*)csfilename))); adextractbmpfromfiletofile( ((void*)((const char*)csfilename)), ((void*)((const char*)m_sbmpfilename)) ); would someone be able to post some sample code which shows doing this task in dwgdirect? thanks. al here is a function which we use to extract the bitmap data - im afraid not directly in a file, but you can construct a bitmap in this way. code: //extern "c" bool __declspec(dllexport) getthumbnailbitmapdwg(const char* pszfilename, void*& pbmpinfo, void*& poutdata, uint& noutdatasize) { _trace("getthumbnailbitmapdwg - %s\n", pszfilename); _assert(pbmpinfo == 0); _assert(poutdata == 0); odthumbnailimage odimage; try { ::oddbgetpreviewbitmap(theapp.services()->createfile(pszfilename), &odimage); if (!odimage.hasbmp()) return false; bitmapinfoheader* pbmpheader = (bitmapinfoheader*) (odimage.bmp.begin()); _assertptr(pbmpheader,sizeof(bitmapinfo)); _assertstatic(sizeof(byte)==1,bytemustbe1insize); // now get the bitmap data byte* p = (byte*)pbmpheader; // go after the header data p += pbmpheader->bisize; // we must skip the rgbquad arrays that follows the info header switch(pbmpheader->bibitcount) { case 1: p += sizeof(rgbquad)*2; break; case 4: p += sizeof(rgbquad)*16; break; case 8: p += sizeof(rgbquad)*256; break; } //switch // get the remaining size noutdatasize = odimage.bmp.size() - (p-(byte*)pbmpheader); //_assert(noutdatasize == pbmpheader->bisizeimage); _assert(odimage.bmp.size()>0); poutdata = new byte[noutdatasize]; _assertptr(p,noutdatasize); ::memcpy(poutdata,p,noutdatasize); // copy the bitmap info - header + color table const uint nbmpinfosize = odimage.bmp.size()-noutdatasize; pbmpinfo = new byte[nbmpinfosize]; ::memcpy(pbmpinfo,pbmpheader,nbmpinfosize); } catch(oderror& e) { //_ifdebug(caddie::drw::reportoderror(e)); _trace("getthumbnailbitmapdwg: file=%s : error=%s\n", pszfilename, caddie::drwimpl::caodutils::getoderrorstring(e).c_str()); unused_always(e); return false; } catch(...) { _trace("unknown error in reading preview image\n"); return false; } //catch return true; } the caller of the function is responsible to delete the memory returned. hope this helps... regards chudomir thanks for the response. i did find this thread from 2002 which asnwered all my questions. |
所有的时间均为北京时间。 现在的时间是 06:44 PM. |