添加影像处理插件:

  1. 在orsImage中增加接口 orsIExeImageTest.h 执行
  2. 在orsImage中增加接口 orsIAlgImageTest.h 算法
  3. 在orsImage中增加接口 orsIImageSourceTest.h 数据源读取
  4. 增加工程 orsImageTest到build/vc60/plugin下,修改文件路径,到src下
  5. 工程设置
    • 右键或者在Project中点击Settings,打开设置界面
      • General中,设置:Not Using MFC(无界面的dll)
    • C/C++中
      • Catagory选择Code Generation,设置Use run-time library为Debug Multithreaded DLL
      • PreProcessor中,设置 Additional include directories为\openrs\desktop\include
    • Link中
      • General中是设置OutPutFIle Name 路径修改为\openRS\desktop\debug\vc60\Plugins\
      • 需要gdal等时,在input中,设置Addtional library path为\openRS\desktop\lib\vc60,\OpenRS\external\lib
  6. 在工程orsImageTest中添加类 orsXImageSourceTest 读取资源,参照其他的弄一个,看输入的源是什么样的,fusion里面是两个数据,filter好像有读一个数据的,可以参考PluginExample里面读取参数那部分

添加简单插件:

  1. 新建工程,与影像插件一样进行工程设置
  2. 添加orsXPlugin.cpp文件
  3. 添加orsXTest.cpp文件
  4. 在orsXTest.cpp中添加类(可以分成头文件和cpp)继承orsIExeHelper<orsISimpleExe>, orsObjectBase
  5. 构造函数中添加需要的默认参数(输入、输出文件,bands,其他设置)
    • m_inputFileNames→addAttr( “inputFileName1”, m_inFileName ); m_inFileName是私有成员变量,表示如果不设置的默认值,下同
    • m_inputFileNames→addAttr( “inputFileName2”, m_inFileName2 );
    • …输入多个文件
    • m_parameterArgs→addAttr( “Bands”, m_inBands);
    • m_parameterArgs→addAttr( “wkt”, m_wkt);
    • …输入多个参数
    • m_outputFileNames→addAttr( “outputFileName”, m_outFileName ); 输出文件路径
  6. 实现setArguments函数
    • inputFileNames→getAttr( “inputFileName”, m_file1 );
    • m_inputFileNames→getAttr(“inputFileName2”, m_file2); 这样也可以,m_inputFileNames是protect变量,m_file2是私有成员变量,下同
    • outputFileNames→getAttr( “outputFileName”, m_outFileName );
    • m_parameterArgs→getAttr( “Bands”, m_inBands );
  7. 实现execute函数
    • 获取影像
      • m_InImage = getImageService()→openImageFile( m_file1 ); m_Image为ref_ptr<orsIImageSource>类型的成员变量,m_file1是获取到的输入文件名
    • 影像处理(未完,只试了简单的处理)
    • 写入影像
	ref_ptr<orsIImageWriter> outImg = ORS_CREATE_OBJECT(orsIImageWriter, ORS_IMAGE_WRITER_DEFAULT ); //输出的影像
	int imgWid, imgHei;
	//输入的影像的高宽
	imgWid = m_InImage->getWidth();
	imgHei = m_InImage->getHeight();
 
	if( m_toRow <= m_fromRow )
		m_toRow = imgHei;
 
	if( m_toCol <= m_fromCol )
		m_toCol = imgWid;
 
	orsRect_i roi( m_fromCol, m_fromRow, m_toCol, m_toRow );
	//创建输出影像
	if( !outImg->Create( m_outFileName, m_InImage.get(), roi,  nBands ) )	{
		getPlatform()->logPrint(ORS_LOG_ERROR, "Can not create image %s", m_outFileName.c_str() );
		return jobOutput;//execute中的返回值
	}