Raster Image Questions

  1. FAQ
  2. »
  3. Products Overview
  4. »
  5. Raster Image Questions

如何打开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)。