Imebra库iOS集成:C++转Swift的VOILUT初始化代码求助
Imebra iOS Swift 版VOILUT转换实现代码
新版Imebra的Swift绑定对齐了C的初始化逻辑,废弃了原有setCenter、setLUT、applyOptimalVOI等实例方法,改为直接通过不同参数的构造器初始化ImebraVOILUT实例,对应C的三种构造场景即可,完整替换代码如下:
if(ImebraColorTransformsFactory.isMonochrome(colorSpace)) { let vois: [ImebraVOIDescription] = try dataSet.getVOIs() as! [ImebraVOIDescription] var luts = [ImebraLUT]() var scanLuts: UInt32 = 0 while(true){ do { luts.append(try dataSet.getLUT(ImebraTagId(group: 0x0028, tag: 0x3010), item: scanLuts)) scanLuts = scanLuts + 1 } catch { print("vois loop exit") break; } } // 你需要的三个分支正确实现 let voilutTransform: ImebraVOILUT if (!vois.isEmpty) { // 对应C++用VOIDescription构造VOILUT的逻辑 voilutTransform = ImebraVOILUT(voi: vois[0]) } else if (!luts.isEmpty) { // 对应C++用LUT构造VOILUT的逻辑 voilutTransform = ImebraVOILUT(lut: luts[0]) } else { // 对应C++生成最优VOI后构造的逻辑 let optimalVoi = ImebraVOILUT.getOptimalVOI(image, inputTopLeftX: 0, inputTopLeftY: 0, inputWidth: width, inputHeight: height) voilutTransform = ImebraVOILUT(voi: optimalVoi) } chain?.add(voilutTransform) }
注意事项
- 不要提前初始化无参数的
ImebraVOILUT实例,新版无参构造已不推荐使用,所有参数在构造时传入即可 getOptimalVOI是ImebraVOILUT的类方法,调用后返回ImebraVOIDescription实例,直接传入构造器即可- 上述代码的构造器命名和Imebra 5.x版本的Swift绑定完全对齐,如果你使用的是其他版本,可根据头文件提示微调构造器参数标签即可
内容的提问来源于stack exchange,提问作者Subrata
相关产品推荐
相关产品推荐

