![]() |
【转帖】how to save the preview bitmap
how to save the preview bitmap
how to save the preview bitmap in the toolkit age, i can use follow codes to get the preview bitmap file: " cstring pvbmppath = "c:\\data\\preview.bmp"; int bmpflag = adextractbmpfromfiletofile(lpstr(lpszfilename),(lp str)(lpcstr)pvbmppath); " now i use dwgdirect to do the same thing. i get the bitmapinfo* info, but i can not save it to a bitmap file. " oduint32 datalength = 0; bitmapinfo* info = (bitmapinfo*)m_pdb->thumbnailbitmap(datalength); void* pbits = null; hbitmap hbitmap = createdibsection( null, info , dib_rgb_colors , &pbits, null, 0 ); writebitmaptofile( hbitmap, lpszfilename ); " have anyone do the same thing? i need your help. last edited by jiff; 28th july 2005 at 09:27 pmfff">. it's my writebitmaptofile() function. i use follow funtion to save the picture file , but it's useless, just get a black bitmap. bool writebitmaptofile( hbitmap hbitmap, lpcstr lpszfilename ) { assert( lpszfilename != null ); if (hbitmap == null) return false; dibsection ds; ::getobject( hbitmap, sizeof(ds), &ds ); int ncolors = (1 << ds.dsbmih.bibitcount); if (ncolors > 256) // can not support more than 256 color return false; if (ds.dsbmih.bisizeimage == 0) { ds.dsbmih.bisizeimage = ((((ds.dsbmih.biwidth * ds.dsbmih.bibitcount) + 31) & ~31) / 8) * ds.dsbmih.biheight; } // get color data rgbquad* prgb = (rgbquad*)malloc( sizeof(rgbquad)*ncolors ); cclientdc dc( null ); cdc memdc; memdc.createcompatibledc(&dc); hbitmap hold = (hbitmap)memdc.selectobject( hbitmap ); uint nentry = ::getdibcolortable( memdc, 0, ncolors, prgb ); verify( nentry == (uint)ncolors ); memdc.selectobject( hold ); memdc.deletedc(); // bitmap file header bitmapfileheader hdr; hdr.bftype = ((word) ('m' << 8) | 'b'); // is always "bm" hdr.bfsize = sizeof(bitmapinfoheader) + sizeof(rgbquad)*ncolors + sizeof( hdr ) + ds.dsbmih.bisizeimage; hdr.bfreserved1 = 0; hdr.bfreserved2 = 0; hdr.bfoffbits = sizeof( hdr ) + sizeof(bitmapinfoheader) + sizeof(rgbquad)*ncolors; try { cfile file; if( !file.open( lpszfilename, cfile::modewrite|cfile::modecreate) ) return false; file.write( &hdr, sizeof( hdr ) ); file.write( &ds.dsbmih, sizeof( ds.dsbmih ) ); file.write( prgb, sizeof(rgbquad)*ncolors ); file.write( ds.dsbm.bmbits, ds.dsbmih.bisizeimage ); } catch ( cfileexception, e ) { return false; } end_catch free( prgb ); return true; } i got it too!! i read wjs "extract thumbnail to file", then i change his codes a little. thanks wjs. i can save my bitmap file now. :-) last edited by jiff; 29th july 2005 at 01:23 amfff">. |
所有的时间均为北京时间。 现在的时间是 03:00 AM. |