【示例教程】如何使用LEADTOOLS实现一个简单的PACS查询客户端

原创|使用教程|编辑:黄竹雯|2018-02-24 14:51:31.000|阅读 207 次

概述:本篇教程讲解如何使用相关的接口进行代码编写,实现Dicom协议中的查询操作。

相关链接:

Leadtools 19总套包下载>>>

leadtools提供了封装后的dicom插件,可以非常方便的开发出dicom 通讯部分的组件,本篇教程讲解如何使用相关的接口进行代码编写,实现Dicom协议中的查询操作。
 
1.用vs2015创建一个winform项目,引用下面的dll,并在代码里引用
using Leadtools;
using Leadtools.Dicom;
using Leadtools.Dicom.Scu.Common;
using Leadtools.Dicom.Scu;
using Leadtools.MedicalViewer;
using System.Net;
using System.IO;
 
2.创建下面的对象
// CFind highlevel 对象
        private QueryRetrieveScu _cfind;
        private DicomScp _server = new DicomScp();
        private TreeNode _currentnode;
        private MedicalViewer _viewer;
 
3.初始化服务器和客户端参数,
本次用的服务器即是开发包中运行pacs服务器设置程序后,创建的L19_PACS_SCP64
在查询过程中主要是使用MatchStudy和MatchSeries事件来获取相应的结果,使用Moved事件来接收传输过来的图片
private void initServer() {
            _server = new DicomScp();
            _server.AETitle = "L19_PACS_SCP64";
            _server.PeerAddress = IPAddress.Parse("10.32.1.75");
            _server.Port = 534;
            _server.Timeout = 30;
        }
private void initCfind()
        {
            _cfind = new QueryRetrieveScu();
            _cfind.AETitle = "L19_CLIENT64";
            _cfind.HostPort = 1030;

            //查询Study
            _cfind.MatchStudy += _cfind_MatchStudy;

            //查询Series
            _cfind.MatchSeries += _cfind_MatchSeries;

            //MOVE
            _cfind.Moved += _cfind_Moved;
        }
private void _cfind_MatchSeries(object sender, MatchEventArgs<Series> e)
        {
            TreeNode seriesnode = new TreeNode(e.Info.Date != null ? e.Info.Date.Value.ToShortDateString() : "未知");
            seriesnode.Tag = e.Info;

            _currentnode.Nodes.Add(seriesnode);
        }

        private void _cfind_MatchStudy(object sender, MatchEventArgs<Study> e)
        {
            TreeNode studynode = new TreeNode(e.Info.Patient.Name.Full);
            studynode.Tag = e.Info;
            querytree.Nodes.Add(studynode);
        }
public delegate void ReceiveFindMovedDelegate(Leadtools.Dicom.Scu.Common.MovedEventArgs e);
        private void _cfind_Moved(object sender, MovedEventArgs e)
        {
            ReceiveFindMoved(e);
        }
        //加载图片
        void ReceiveFindMoved(MovedEventArgs e) {
            if (InvokeRequired)
            {
                Invoke(new ReceiveFindMovedDelegate(ReceiveFindMoved), e);
            }
            else
            {
                ImageInstance instance = e.Instance as ImageInstance;

                int cols = 1;
                int rows = 1;
                RasterImage ri = instance.Images;

                if (instance != null && instance.Images != null)
                {
                    int pageCount = instance.Images.PageCount;
                    if (pageCount > 1)
                    {
                        // Display at most 6 x 6 (36) frames
                        if (pageCount >= 36)
                        {
                            cols = 6;
                            rows = 6;
                        }
                        else
                        {
                            cols = (int)Math.Floor(Math.Sqrt(pageCount));
                            rows = (int)Math.Ceiling((double)pageCount / cols);
                        }
                    }

                    MedicalViewerMultiCell m = GetCell();

                    m.Rows = rows;
                    m.Columns = cols;

                    if (m.Image != null)
                    {
                        for (int pageIndex = 0; pageIndex < instance.Images.PageCount; pageIndex++)
                        {
                            instance.Images.Page = pageIndex + 1;

                            try
                            {
                                m.Image.AddPage(instance.Images);
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.Message);
                            }
                        }
                    }
                    else
                    {
                        m.Image = instance.Images;
                    }

                    if (pageCount > 1)
                    {
                        m.SetTag(0, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.Frame);
                        m.ShowTags = true;
                    }
                    m.SetTag(1, MedicalViewerTagAlignment.BottomLeft, MedicalViewerTagType.WindowLevelData);

                    // Give the medical viewer cell the focus
                    if (_viewer.Cells.Count > 0 &&
                          _viewer.Cells[0] is MedicalViewerBaseCell)
                    {
                        (_viewer.Cells[0] as MedicalViewerBaseCell).Selected = true;
                    }

                    m.SetScaleMode(MedicalViewerScaleMode.Fit);
                }
            }

        }
 

初始化完成后即可使用下面的命令来查询
查询study
_cfind.Find(_server, new FindQuery());
 
查询特定study的series
FindQuery query = new FindQuery();
Study study = td.Tag as Study;
query.QueryLevel = QueryLevel.Series;
query.PatientId = study.Patient.Id;
query.StudyInstanceUID = study.InstanceUID;
_cfind.Find(_server, query);
 
用Move方法检索图片,参数依次为服务器对象,客户端aetitle,Study InstanceUID,Series InstanceUID
_cfind.Move(_server, _cfind.AETitle, (e.Node.Parent.Tag as Study).InstanceUID, (e.Node.Tag as Series).InstanceUID);


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果

登录 慧都网发表评论


暂无评论...

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
相关厂商
相关产品
LEADTOOLS Imaging Pro Developer Toolkit

20多年的老牌图像处理控件,支持TWAIN扫描、200多种图像效果、150多种图像格式…

LEADTOOLS Document Imaging Suite Developer Toolkit

LEADTOOLS Document Imaging Suite SDK是LEADTOOLS SDK中各种特点的精选组合,这套强大的工具利用了LEAD行业领先的图像处理技术来智能地识别文档的特征,而根据文档的特征可以识别扫描的或传真的任何类型的表格图像。

LEADTOOLS Document Imaging Developer Toolkit

多语言的文档图像处理控件,支持光符识别处理、条形码扫描识别等。

LEADTOOLS Medical Imaging Developer Toolkit

LEADTOOLS Medical Imaging是一款医疗成像控件,包含了一些精心挑选的、经过优化的特性,可以满足医疗成像应用程序开发的特殊需要。

LEADTOOLS Medical Imaging Suite Developer Toolkit

LEADTOOLS Medical Imaging Suite帮您开发功能强大的PACS和医学成像应用程序

LEADTOOLS Multimedia Developer Toolkit

LEADTOOLS Multimedia SDK是一款功能强大的音频处理 / 视频处理控件,可创建具有专业水准的高品质的多媒体应用程序。

LEADTOOLS DVD Module

可以创建DVD影像,包括DVD影像接口,MPEG-2和MPEG-1 多路器,MPEG音频编码器,LEAD MPEG-2标准音频码

LEADTOOLS Medical Multimedia Module

可从一组同源的2D医疗影像来构建、查看、编辑3维体,并可用它包含的图像处理函数来提高可视化。

LEADTOOLS Streaming Module

LEADTOOLS Video Streaming Module是一个完美的解决方案,提供了一个非常卓越的多媒体工具包,同时利用 LEAD 视频和音频编码的优点可以减少需要的带宽。

LEADTOOLS Professional Asian OCR Module

LEADTOOLS Asian OCR Module在应用程序中增加了一些光学字符识别(OCR)技术的方法,并包含了开发健壮的,高性能的和可扩展的图像识别方案所需要的技术。

LEADTOOLS OCR Module - LEAD Engine

开发健壮的,高性能的和可扩展的图像识别方案所需要的OCR 识别技术。

LEADTOOLS OCR Module - OmniPage Engine

LEADTOOLS OCR Module - OmniPage Engine增加了对添加光学字符识别(OCR)和智能字符识别(ICR)技术到应用程序的方法,并且包含开发稳健的,高性能的和可扩展的图像识别解决方案所需要的一切。

LEADTOOLS ICR Module - OmniPage Engine

ICR Module - OmniPage Engine用于将ICR和OCR技术集成到应用程序中,并提供程序员强大,高性能,可扩展的图像识别解决方案。

LEADTOOLS Professional Arabic OCR Module

LEADTOOLS Arabic OCR Module增加了对添加光学字符识别(OCR)技术到应用程序的方法,并且包含开发稳健的,高性能的和可扩展的图像识别解决方案所需要的一切。

LEADTOOLS Recognition Imaging Developer Toolkit

条码图像识别开发包,帮您创建端到端文档图像应用程序的企业级文档自动化解决方案

LEADTOOLS PACS Imaging Developer Toolkit

开发功能强大的PACS Imaging应用程序的最佳选择

LEADTOOLS MPEG-2 Transport Module

包含DirectShow过滤器,用于创建和播放MPEG-2 传输和MPEG-2程序流,此外并能够从RTSP服务器产生流数据。

LEADTOOLS Document HTML5 Module

LEADTOOLS Document HTML5帮您开发强健、轻量级的跨平台文档图像处理应用程序。

LEADTOOLS Medical HTML5 Module

使用LEADTOOLS Medical HTML5 SDK Module开发下一代的DICOM和PACS图像处理应用程序。

LEADTOOLS Multimedia Suite Developer Toolkit

LEADTOOLS Multimedia SDK是专为开发各种跨行业音频/视频应用程序所设计的多媒体开发工具包。

LEADTOOLS Imaging HTML5 Module

LEADTOOLS Imaging HTML5 Module帮您开发强健、轻量级的跨平台图像应用程序

LEADTOOLS Barcode Pro Developer Toolkit

一款全面的可读写1D和2D条形码的软件开发工具包。

LEADTOOLS PDF Pro

LEADTOOLS PDF Pro 具备浏览光栅图与编辑PDF文件所需的所有功能。

在线
客服
在线
QQ
电话
咨询
400-700-1020
购物车 反馈 返回
顶部
在线客服系统
live chat