如何打开DWG文件并与正在绘制的图像文件合并显示?我需要将DWG和TIF文件在屏幕上合并显示,如同合并PNG文件效果,且无需实际保存文件。
最简单的方法是将图像作为背景附加到DWG文件中。图像背景可以拉伸填充整个视口背景,也可以使用图像平铺方式。
如果需要更精确地控制栅格图像位置:
可以将栅格图像实体附加到DWG文件中(注意:如果不希望将栅格图像保存在图纸中,需在文件保存前删除该实体)
或者创建额外的OdGsView视图并附加临时栅格图像实体,这样您就可以自由控制栅格图像的显示位置
ODA是否具备栅格图像矢量化功能?
不支持,我们未提供将栅格扫描图转换为CAD图纸(线条、圆弧等)的功能。
如何读取PDF文件并将其转换为图像(BMP/JPEG/PNG格式)并保存?
PDF文档页面转图像的实现示例可参考PdfiumWrapperImpl.cpp中的getThumbnail函数。
OdGiRasterImage对象保存为文件的实现示例请查看DbDeviceDriver.cpp中的createRasterImage函数。
如何生成带透明背景的PNG文件?
需使用GLES2设备(唯一支持透明度的设备),具体实现请参考SimpleExportToRaster示例。
导出的栅格图像为何显示空白?
可能存在以下三种原因:
- 栅格文件定位失败
请在继承OdDbHostAppServices的findFile()方法中设置断点,检查文件是否可被正常定位。 - RasterServices模块不支持该图像格式
请查阅OdRxRasterServices::ImageType枚举中所有受支持的栅格格式。
缺失RasterServices模块 - 该模块负责处理栅格文件相关操作。
静态库配置需注意:.必须链接RxRasterServices和FreeImage库
建议同时链接RasterProcessor库以启用格式转换功能
需在静态模块映射中注册服务:#if !defined(_TOOLKIT_IN_DLL_) || defined(__MWERKS__) ODRX_DECLARE_STATIC_MODULE_ENTRY_POINT(ExRasterModule); ODRX_DECLARE_STATIC_MODULE_ENTRY_POINT(OdRasterProcessingServicesImpl); ODRX_BEGIN_STATIC_MODULE_MAP() ODRX_DEFINE_STATIC_APPLICATION(RX_RASTER_SERVICES_APPNAME, ExRasterModule) ODRX_DEFINE_STATIC_APPLICATION(OdRasterProcessorModuleName, OdRasterProcessingServicesImpl) ODRX_END_STATIC_MODULE_MAP() #endif // !defined(_TOOLKIT_IN_DLL_) || defined(__MWERKS__)
- 动态库配置需注意:
所有涉及的.tx模块必须存在于应用程序目录中
如何在图纸中嵌入栅格图像?
可通过创建包含嵌入式栅格图像的OLE对象实现。具体实现请参考Drawing/Examples/ExCommands/ExInsertRaster.cpp文件,该文件实现了创建OLE实体的命令。
如何设置渲染位图的分辨率?
您可通过调用OdGsDevice::onSize()方法设置位图渲染设备的分辨率。具体实现请参考OdVectorizeEx示例程序(路径:Drawing/Examples/OdVectorizeEx/OdVectorizeEx.cpp)。
如何在导出图纸时指定栅格图像的文件格式?
您可以通过RxRasterServices::saveRasterImage()方法的Type参数指定格式。若未指定Type参数,则默认使用文件扩展名确定格式。
详细实现请参考RasterExport示例应用(路径:Kernel/Exports/RasterExport/Source/RasterExportCmd.cpp)。
ODA框架支持哪些栅格格式的导入/导出?
所有受支持的栅格格式均列于OdRxRasterServices::ImageType枚举中。
如何设置DWG导出为栅格图像时的JPEG质量?
可通过OdRxRasterServices::convertRasterImage()方法控制JPEG压缩质量:
const OdUInt32 flagsChain[3] = { OdRxRasterServices::kJpegQuality, 85, 0 };
if (pRasSvcs->convertRasterImage( pRaster, OdRxRasterServices::kJPEG, pStreamBuf, flagsChain))
{
...
}
质量等级按百分比划分:
<20%:低质量
20-40%:中等质量
40-60%:正常质量
60-80%:良好质量(默认)
≥80%:最佳质量
如何获取图纸中加载的栅格图像文件名?
可通过以下方法访问:
使用OdGiRasterImage::sourceFileName()方法
或根据数据库访问层级选用OdDbRasterImageDef::sourceFileName()方法
如何在图纸中添加栅格图像?
请参考OdWriteEx示例应用中的DbFiller::addImage()方法实现(路径:Drawing/Examples/OdWriteEx/DbFiller.cpp)。
如何隐藏添加到图纸中的栅格图像边框?
可通过以下任一代码片段实现隐藏:
OdDbRasterVariablesPtr pRVars = OdDbRasterVariables::openRasterVariables(pDb->database(), OdDb::kForWrite);
pRVars->setImageFrame(OdDbRasterVariables::kImageFrameOff);
or
OdResBufPtr val = OdResBuf::createObject();
val->setRestype(OdResBuf::kRtInt16);
val->setInt16(0);
pDb->setSysVar(OD_T("IMAGEFRAME"), val);
如何设置图纸中栅格图像的位置、高度和宽度?
您可以使用OdDbRasterImage::setOrientation()
方法来设置图像位置、高度和宽度。更多详情请参考OdWriteEx示例应用中的DbFiller::addImage()
方法实现(路径:Drawing/Examples/OdWriteEx/DbFiller.cpp)。