本教程可以教您如何使用切割面和双切割面功能来生成一个源自图像集合的切片图。
1. 请您打开Visual Studio2005或一个更高的版本。
- 从“文件”菜单中选择“项目”。
- 会出现一个新建项目的对话框。
- 在项目类型中展开“其他语言”节点,然后点击“Visual C#”节点。
- 从对话框左侧的模板列表中,选择“Windows窗体应用程序”。
- 在“项目名称”字段里输入该项目的名称“创建两个源自图像集合的切片图”,然后选择“确定”。
- 选择“确定”以创建该项目。
- 从“视图”菜单中选择“解决方案资源管理器”。
- 在“解决方案资源管理器”的树型图中,右键单击“引用”节点,然后选择“添加引用”。
- 在“添加引用”对话框中选择“浏览”选项卡,然后添加以下这些DLL文件:
- Leadtools.dll
- Leadtools.Codecs.dll
- Leadtools.MedicalViewer.dll
- Leadtools.Medical3D.dll
- Leadtools.Dicom.dll
- Leadtools.Codecs.Cmp.dll
注意:如果不打算加载DICOM文件,那么您就不需要添加Leadtools.Dicom.dll。
注意:如果您遇到一个“无效的文件格式”或“功能不支持”的异常,请参阅该主题“无效的文件格式/功能不支持”。
切换到Form1代码视图(在“解决方案资源管理器”上右键单击Form1,然后选择“查看代码”),并在文件的开头添加以下几行代码:
[Visual Basic]Imports LeadtoolsImports Leadtools.CodecsImports Leadtools.MedicalViewerImports Leadtools.Medical3DImports Leadtools.Dicom[C#]using Leadtools;using Leadtools.Codecs;using Leadtools.MedicalViewer;using Leadtools.Medical3D;using Leadtools.Dicom;
- 在Form1中创建一个新的方法InitClass()。
在该方法InitClass()中写入如下代码:
[Visual Basic]Private Sub InitClass()Dim MY_LICENSE_FILE As String = "d:\temp\TestLic.lic"
' 开启DICOM支持。Dim MY_DicomDEVELOPER_KEY As String = "xyz123abc"
RasterSupport.SetLicense(MY_LICENSE_FILE, MY_DicomDEVELOPER_KEY);' 开启Medical支持。Dim MY_MedicalDEVELOPER_KEY As String = "abc123xyz"
RasterSupport.SetLicense(MY_LICENSE_FILE, MY_MedicalDEVELOPER_KEY);' 开启Medical 3D支持。Dim MY_3DDEVELOPER_KEY As String = "123xyzabc"
RasterSupport.SetLicense(MY_LICENSE_FILE, MY_3DDEVELOPER_KEY);' 创建一个将被用于加载图像的编解码器类的新实例。Dim _codecs As RasterCodecs = New RasterCodecs()' 创建一个MedicalViewer的新实例。该查看器布局将被划分为2X2。Dim viewer As MedicalViewer = New MedicalViewer(2, 2)' 使该视图与整个窗体相匹配。viewer.Dock = DockStyle.Fill' 创建一个包含图像集合的单元格。Dim cell As MedicalViewerMultiCell = New MedicalViewerMultiCell()' 将以上单元格添加到MedicalViewer。viewer.Cells.Add(cell)cell.Image = _codecs.Load("C:\Users\Public\Documents\LEADTOOLS Images\image1.dcm")
' 将查看器作为子控件添加到窗体。Me.Controls.Add(viewer)End Sub[C#]void InitClass()
{string MY_LICENSE_FILE = "d:\\temp\\TestLic.lic";
// 开启DICOM支持。
string MY_DicomDEVELOPER_KEY = "xyz123abc";
RasterSupport.SetLicense(MY_LICENSE_FILE, MY_DicomDEVELOPER_KEY);// 开启Medical支持。
string MY_MedicalDEVELOPER_KEY = "abc123xyz";
RasterSupport.SetLicense(MY_LICENSE_FILE, MY_MedicalDEVELOPER_KEY);// 开启Medical 3D支持。
string MY_3DDEVELOPER_KEY = "123xyzabc";
RasterSupport.SetLicense(MY_LICENSE_FILE, MY_3DDEVELOPER_KEY);// 创建一个将被用于加载图像的编解码器类的新实例。
RasterCodecs _codecs = new RasterCodecs();// 创建一个MedicalViewer的新实例。该查看器布局将被划分为2X2。
MedicalViewer viewer = new MedicalViewer(2, 2);// 使该视图与整个窗体相匹配。
viewer.Dock = DockStyle.Fill;// 创建一个包含图像集合的单元格。
MedicalViewerMultiCell cell = new MedicalViewerMultiCell();// 将以上单元格添加到MedicalViewer。
viewer.Cells.Add(cell);cell.Image = _codecs.Load(@"C:\Users\Public\Documents\LEADTOOLS Images\image1.dcm");
// 将查看器作为子控件添加到窗体。
this.Controls.Add(viewer);}
注意:您可能需要对以上路径进行更改,以便指向位于LEADTOOLS 图像目录的“image1.dcm”。
- 请从Form1的构造函数中调用该方法InitClass,并将该调用放置与于InitializeComponent()之后。
- 如果现在运行该程序,您将会看到一个2x2的图像显示布局,其中的每一个时间间隙都以多帧图像为填充。
- 请将以下这几行代码添加到InitClass功能的底部。这是查看进度条所必需的步骤。
[Visual Basic]Show()Update()[C#]Show();Update();
- 在使用切割线功能之前,请先注册两个事件。这两个事件分别是:
[Visual Basic]AddHandler cell.Data3DRequested, AddressOf Of MedicalViewerData3DRequestedEventArgs[C#]cell.Data3DRequested += new EventHandler<MedicalViewerData3DRequestedEventArgs>(cell_Data3DRequested);要使事件处理程序看起来如下图所示:[Visual Basic]Private Sub cell_Data3DRequested(ByVal sender As Object, ByVal e As MedicalViewerData3DRequestedEventArgs)e.Succeed = Medical3DEngine.Provide3DInformation(e)End SubC#void cell_Data3DRequested(object sender, MedicalViewerData3DRequestedEventArgs e)
{e.Succeed = Medical3DEngine.Provide3DInformation(e);}o Data3DFrameRequested: 将以下这行代码添加到InitClass方法的底部:[Visual Basic]AddHandler cell.Data3DFrameRequested, AddressOf Of MedicalViewer3DFrameRequestedEventArgs[C#]cell.Data3DFrameRequested += new EventHandler<MedicalViewer3DFrameRequestedEventArgs>(cell_Data3DFrameRequested);
要使事件处理程序看起来如下图所示(您可能需要根据您在前面的步骤中所选择的文件名来更改该文件名):
[Visual Basic]Private Sub cell_Data3DFrameRequested(ByVal sender As Object, ByVal e As MedicalViewer3DFrameRequestedEventArgs)' 创建一个将用于加载图像的编解码器类的新实例。Dim _codecs As RasterCodecs = New RasterCodecs()' 这行代码可以加载包含所需帧索引(e.ImageIndex)的图像,并将其分配给变量参数图像。e.Image = _codecs.Load("C:\Users\Public\Documents\LEADTOOLS Images\image1.dcm", 0, CodecsLoadByteOrder.BgrOrGray, e.ImageIndex + 1, e.ImageIndex + 1)
End Sub[C#]void cell_Data3DFrameRequested(object sender, MedicalViewer3DFrameRequestedEventArgs e)
{//创建一个将用于加载图像的编解码器类的新实例。
RasterCodecs _codecs = new RasterCodecs();//这行代码可以加载包含所需帧索引(e.ImageIndex)的图像,并将其分配给函数参数图像。
e.Image = _codecs.Load(@"C:\Users\Public\Documents\LEADTOOLS Images\image1.dcm", 0, CodecsLoadByteOrder.BgrOrGray, e.ImageIndex + 1, e.ImageIndex + 1);
}
- 添加一条切割线或双切割线。对本演示程序来说,让我们按照如下所述来添加双切割线:
创建两个MedicalViewerCell的新实例,并把它们添加到MedicalViewer。为了做到这一点,请将以下这几行代码添加到InitClass方法的底部:
[Visual Basic]' 创建一条双切割线:一条双切割线是由两条单独的切割线构成的。而您需要做的是为每一条都创建一个单元格。MedicalViewerCell firstCutLineCell = new MedicalViewerCell()MedicalViewerCell secondCutLineCell = new MedicalViewerCell()' 将以上两个切割线实例都添加到MedicalViewer实例上。viewer.Cells.Add(firstCutLineCell)viewer.Cells.Add(secondCutLineCell)[C#]// 创建一条双切割线:一条双切割线是由两条单独的切割线构成的。而您需要做的是为每一条都创建一个单元格。
MedicalViewerCell firstCutLineCell = new MedicalViewerCell();MedicalViewerCell secondCutLineCell = new MedicalViewerCell();// 将以上两个切割线实例都添加到MedicalViewer实例上。
viewer.Cells.Add(firstCutLineCell);viewer.Cells.Add(secondCutLineCell);
这些实例将被用于查看双切割线所输出的图像。
创建一个MedicalViewerDoublePlaneCutLine的新实例,并通过构造函数参数来添加上述两种单元格。为了做到这一点,请将以下这一行代码添加到InitClass方法的底部:
[Visual Basic]Dim doubleCutLine As MedicalViewerDoublePlaneCutLine = new MedicalViewerDoublePlaneCutLine(firstCutLineCell, secondCutLineCell)[C#]MedicalViewerDoublePlaneCutLine doubleCutLine = new MedicalViewerDoublePlaneCutLine(firstCutLineCell, secondCutLineCell);
最后,请将以上所创建的MedicalViewerDoublePlaneCutLine对象添加到包含图像集合的单元格的DoubleCutLine集合。为了做到这一点,请将如下这一行代码添加到InitClass方法的底部:
[Visual Basic]cell.ReferenceLine.DoubleCutLines.Add(doubleCutLine)[C#]cell.ReferenceLine.DoubleCutLines.Add(doubleCutLine);
您的主要类别应该如下所示:
[Visual Basic]Public Sub New()InitializeComponent()InitClass()End SubPrivate Sub InitClass()Dim MY_LICENSE_FILE As String = "d:\temp\TestLic.lic"
' 开启DICOM支持。Dim MY_DicomDEVELOPER_KEY As String = "xyz123abc"
RasterSupport.SetLicense(MY_LICENSE_FILE, MY_DicomDEVELOPER_KEY);' 开启Medical支持。Dim MY_MedicalDEVELOPER_KEY As String = "abc123xyz"
RasterSupport.SetLicense(MY_LICENSE_FILE, MY_MedicalDEVELOPER_KEY);'开启Medical 3D支持。Dim MY_3DDEVELOPER_KEY As String = "123xyzabc"
RasterSupport.SetLicense(MY_LICENSE_FILE, MY_3DDEVELOPER_KEY);' 创建一个将被用于加载图像的编解码器类的新实例。Dim _codecs As RasterCodecs = New RasterCodecs()' 创建一个MedicalViewer的新实例。该查看器布局将被划分为2X2。Dim viewer As MedicalViewer = New MedicalViewer(2, 2)' 使该视图与整个窗体相匹配。viewer.Dock = DockStyle.Fill' 创建一个包含图像集合的单元格。Dim cell As MedicalViewerMultiCell = New MedicalViewerMultiCell()' 将以上单元格添加到MedicalViewer。viewer.Cells.Add(cell)cell.Image = _codecs.Load("C:\Users\Public\Documents\LEADTOOLS Images\image1.dcm")
' 将查看器作为子控件添加到窗体。Me.Controls.Add(viewer)Show()Update()AddHandler cell.Data3DRequested, AddressOf Of MedicalViewerData3DRequestedEventArgsAddHandler cell.Data3DFrameRequested, AddressOf Of MedicalViewer3DFrameRequestedEventArgs' 创建一条双切割线:一条双切割线是由两条单独的切割线构成的。而您需要做的是为每一条都创建一个单元格。Dim firstCutLineCell As MedicalViewerCell = New MedicalViewerCell()Dim secondCutLineCell As MedicalViewerCell = New MedicalViewerCell()' 将以上两个切割线实例都添加到MedicalViewer实例上。viewer.Cells.Add(firstCutLineCell)viewer.Cells.Add(secondCutLineCell)Dim doubleCutLine As MedicalViewerDoublePlaneCutLine = New MedicalViewerDoublePlaneCutLine(firstCutLineCell, secondCutLineCell)cell.ReferenceLine.DoubleCutLines.Add(doubleCutLine)End SubPrivate Sub cell_Data3DRequested(ByVal sender As Object, ByVal e As MedicalViewerData3DRequestedEventArgs)e.Succeed = Medical3DEngine.Provide3DInformation(e)End SubPrivate Sub cell_Data3DFrameRequested(ByVal sender As Object, ByVal e As MedicalViewer3DFrameRequestedEventArgs)' 创建一个将被用于加载图像的编解码器类的新实例。Dim _codecs As RasterCodecs = New RasterCodecs()' 该行代码可以加载包含所需帧索引(e.ImageIndex)的图像,并将其分配给变量参数图像。e.Image = _codecs.Load("C:\Users\Public\Documents\LEADTOOLS Images\image1.dcm", 0, CodecsLoadByteOrder.BgrOrGray, e.ImageIndex + 1, e.ImageIndex + 1)
End Sub[C#]public Form1(){InitializeComponent();InitClass();}void InitClass()
{string MY_LICENSE_FILE = "d:\\temp\\TestLic.lic";
// 开启DICOM支持。
string MY_DicomDEVELOPER_KEY = "xyz123abc";
RasterSupport.SetLicense(MY_LICENSE_FILE, MY_DicomDEVELOPER_KEY);// 开启Medical支持。
string MY_MedicalDEVELOPER_KEY = "abc123xyz";
RasterSupport.SetLicense(MY_LICENSE_FILE, MY_MedicalDEVELOPER_KEY);// 开启Medical 3D支持。
string MY_3DDEVELOPER_KEY = "123xyzabc";
RasterSupport.SetLicense(MY_LICENSE_FILE, MY_3DDEVELOPER_KEY);// 创建一个将被用于加载图像的编解码器类的新实例。
RasterCodecs _codecs = new RasterCodecs();// 创建一个MedicalViewer的新实例。该查看器布局将被划分为2X2。
MedicalViewer viewer = new MedicalViewer(2, 2);// 使该视图与整个窗体相匹配。
viewer.Dock = DockStyle.Fill;// 创建一个包含图像集合的单元格。
MedicalViewerMultiCell cell = new MedicalViewerMultiCell();// 将以上单元格添加到MedicalViewer。
viewer.Cells.Add(cell);cell.Image = _codecs.Load(@"C:\Users\Public\Documents\LEADTOOLS Images\image1.dcm");
// 将查看器作为子控件添加到窗体。
this.Controls.Add(viewer);Show();Update();cell.Data3DRequested += new EventHandler<MedicalViewerData3DRequestedEventArgs>(cell_Data3DRequested);cell.Data3DFrameRequested += new EventHandler<MedicalViewer3DFrameRequestedEventArgs>(cell_Data3DFrameRequested);// 创建一条双切割线:一条双切割线是由两条单独的切割线构成的。而您需要做的是为每一条都创建一个单元格。
MedicalViewerCell firstCutLineCell = new MedicalViewerCell();MedicalViewerCell secondCutLineCell = new MedicalViewerCell();// 将以上两个切割线实例都添加到MedicalViewer实例上。
viewer.Cells.Add(firstCutLineCell);viewer.Cells.Add(secondCutLineCell);MedicalViewerDoublePlaneCutLine doubleCutLine = new MedicalViewerDoublePlaneCutLine(firstCutLineCell, secondCutLineCell);cell.ReferenceLine.DoubleCutLines.Add(doubleCutLine);}void cell_Data3DRequested(object sender, MedicalViewerData3DRequestedEventArgs e)
{e.Succeed = Medical3DEngine.Provide3DInformation(e);}void cell_Data3DFrameRequested(object sender, MedicalViewer3DFrameRequestedEventArgs e)
{// 创建一个将被用于加载图像的编解码器类的新实例。
RasterCodecs _codecs = new RasterCodecs();// 该行代码可以加载包含所需帧索引(e.ImageIndex)的图像,并将其分配给变量参数图像。
e.Image = _codecs.Load(@"C:\Users\Public\Documents\LEADTOOLS Images\image1.dcm", 0, CodecsLoadByteOrder.BgrOrGray, e.ImageIndex + 1, e.ImageIndex + 1);
}
- 请运行该应用程序。在您正确地完成了以上所有步骤之后,应该可以看到三个单元格:一个带有十字线(双切割线),另外两个则都显示了所生成的图像。
注意:如果您想了解有关如何获取上述解锁键的更多相关详细信息,请联系LEAD技术支持团队。
注意:如果您想要查看更高质量的图像,我们可以提供DICOMDIR示例文件,您可以点击这里进行下载。如果您想要了解有关如何在DICOMDIR中构建3D对象的更多相关详细信息,请参阅这一章“通过加载DICOMDIR来创建一个3D对象”。
支持
关于其他产品的更多信息,请访问我们的官方网站,
欢迎下载免费的全功能评估版SDK,全功能试用版中有这个例子的全部源代码。
同时欢迎您使用评估版期间的免费技术支持。