我正在尝试从PACS服务器下载dcm图像,但这会生成一个空的dcm文件。
以下是代码:
RequestContext.getCurrentInstance().update("foo:bar");
答案 0 :(得分:3)
“下载”这个词在这里有点奇怪。正确的单词是Query-Retrieve。
这是两步操作,第一部分是您正在进行的查询(CFind)。
您可以将其与数据库查询进行比较。假设您有一个包含文件和名称路径的表。你的程序不知道路径。因此,您在数据库上运行查询SELECT Name, Path FROM FilesTable
。数据库返回数据。这就是CFind所发生的事情,这就是你在onResponse(DicomCFindRequest req, DicomCFindResponse res)
中得到的结果。 res
中的数据是数据库返回的一条记录。 这不是实际文件。。
现在,下一部分是从您刚刚收到的路径下载此文件。因此,您可以执行File.Copy(srcPath, destPath)
之类的文件操作,也可以进行HTTP / FTP下载。在DICOM中,这可以通过两种方式实现 - CGet和CMove。 CMove更受欢迎有很多原因。
在我的示例中,如果您已经知道文件的路径和名称,则可以绕过数据库查询。同样,如果您事先知道标识符,则可以绕过CFind并直接执行CMove。请参阅this帖子。
此段落有点复杂,在不同实施的工作流程中可能会有一些变化。要做CMove,必须存在CStoreSCP。您(CMoveSCU)将向您要接收实例的CStoreSCP的AE标题发送CMove命令到PACS(CMoveSCP)。这意味着要么您还应该开发自己的CStoreSCP,要么还应该涉及其他一些。 CMoveSCP将读取您发送的AE标题,并将其与其配置相匹配。这意味着您的CStoreSCP必须事先在PACS上配置。从配置中,它将采用IP地址和端口建立新的关联。这称为角色转换。 CMoveSCP现在也可以作为CStoreSCU使用。作为CStoreSCU,PACS会将实例推送到您的CStoreSCP。这样,您实际上可以获得图像/实例。
我不是开发人员(@AndersGustafsson是该工具的专家。我猜他也是该项目的贡献者);但我相信这一点必须简单看看你已经付出的努力。当我刚接触DICOM时,我很少遇到语法问题。大多数时候,我的概念和术语都有问题。我试着用最好的方法在这里解释一下。希望这会对你有所帮助。
参考Rony的艺术品:
http://dicomiseasy.blogspot.in/2012/01/dicom-queryretrieve-part-i.html
http://dicomiseasy.blogspot.in/2012/02/c-move.html
我在@AndersGustafsson发布的链接中找到了一些示例代码。
var cmove = new DicomCMoveRequest("DEST-AE", studyInstanceUid);
var client = new DicomClient();
client.AddRequest(cmove);
client.Send("127.0.0.1", 11112, false, "SCU-AE", "SCP-AE"); // Alt 1
await client.SendAsync("127.0.0.1", 11112, false, "SCU-AE", "SCP-AE"); // Alt 2
答案 1 :(得分:1)
C-FIND不用于获取整个DICOM文件,它用于过滤掉例如属于特定研究和系列的图像。如果CreateImageQuery
调用中指定的研究和系列实例UID可用于PACS中的图像,则PACS将使用C-FIND响应进行响应,其中数据集包含每个的 SOP实例UID 图像识别。
然后,您需要进行C-GET或C-MOVE以从PACS获取实际图像。
有关如何使用各种网络调用的详细信息,请参阅 fo-dicom Github存储库的README页面,或检查存储库中的网络单元测试。