![]() |
【转帖】create a bitmap from a macrodefinition
create a bitmap from a macrodefinition
create a bitmap from a macrodefinition how can i create a previewbitmap from a blocktablerecord ? here is a code which forms a bitmap from the current model or paper space. code: odgsdcrect gsrect(0, width , height, 0); odgicontextfordbdatabaseptr pctx = odgicontextfordbdatabase::createobject(); pctx->setdatabase(m_pdb); pdevice = oddbgsmanager::setupactivelayoutviews(pdevice, pctx); odcolorref clrbackground(odrgb(255,255,255)); clrbackground = (odcolorref)drwservices()->vars()->get<int>("thumbnailimagebkcolor"); pdevice->setbackgroundcolor(clrbackground); pdevice->setlogicalpalette(odcmacadpalette(clrbackground), 256); pdevice->onsize(gsrect); pdevice->properties()->putat("bitperpixel", odrxvariantvalue(oduint32(8))); // zoom to the extents if the option needs it if (nthumboption == thumbextents) { this->odgsview_zoomextents(pdevice->viewat(0)); } pdevice->update(); odgirasterimageptr praster = pdevice->properties()->getat("rasterimage"); bitmapinfoheader bmih = {0}; praster->getbitmapinfoheader(bmih); thumbimg.header.clear(); thumbimg.header.resize(80, 0); thumbimg.bmp.clear(); oduint32 nbytes = 0; const oduint8* bytes = praster->getscanlines(nbytes); oduint32 npalettebytes = 0; const oduint8* palettebytes = praster->getpalettedata(npalettebytes); thumbimg.bmp.resize(sizeof(bitmapinfoheader) + npalettebytes + nbytes); ::memcpy(thumbimg.bmp.asarrayptr(), (void **)&bmih, sizeof(bitmapinfoheader)); ::memcpy(thumbimg.bmp.asarrayptr() + sizeof(bitmapinfoheader), palettebytes, npalettebytes); ::memcpy(thumbimg.bmp.asarrayptr() + sizeof(bitmapinfoheader) + npalettebytes, bytes, nbytes); it won't work for you truly, because you cannot set an active layout block a block table record which is not a layout (i.e. model or paperspace). can't you do it in a temp database which has external reference of the block table record, or simply create a temp paperspace layout, then insert a block reference in it, give zoom all, and then call pdevice->update()? probably it is not the easiest way... regards chudomir best regards chudomir |
所有的时间均为北京时间。 现在的时间是 12:07 AM. |