- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我使用了下面提到的来自这个存储库的 dcm4che2 API http://www.dcm4che.org/maven2/dcm4che/在我的 java 项目中。
dcm4che-core-2.0.29.jar
org.dcm4che2.data.DicomObject
org.dcm4che2.io.StopTagInputHandler
org.dcm4che2.data.BasicDicomObject
org.dcm4che2.data.UIDDictionary
org.dcm4che2.data.DicomElement
org.dcm4che2.data.SimpleDcmElement
org.dcm4che2.net.service.StorageCommitmentService
org.dcm4che2.util.CloseUtils
dcm4che-net-2.0.29.jar
org.dcm4che2.net.CommandUtils
org.dcm4che2.net.ConfigurationException
org.dcm4che2.net.NetworkApplicationEntity
org.dcm4che2.net.NetworkConnection
org.dcm4che2.net.NewThreadExecutor
org.dcm4che3.net.service.StorageService
org.dcm4che3.net.service.VerificationService
目前我想迁移到 dcm4che3,但是在我从这个存储库下载的 dcm4che3 中找不到上面列出的 API http://sourceforge.net/projects/dcm4che/files/dcm4che3/
您能否指导我使用其他方法?
最佳答案
正如您已经观察到的那样,BasicDicomObject 已成为历史——与许多其他对象一样。
新的“Dicom 对象”是属性——对象是属性的集合。
因此,您创建属性,用 RQ 行为(C-FIND 等)所需的标签填充它们,您得到的返回是另一个属性对象,您可以从中提取所需的标签。
在我看来,dcm4che 2.x 在处理单个值表示的主题上含糊不清。 dcm4che 3.x 更清晰一些。
迁移要求重写有关查询方式和处理单个标签的代码。另一方面,dcm4che 3.x 使新代码不那么复杂。
根据要求,我添加了与某些服务类提供商 (SCP) 的连接的初始设置:
// Based on org.dcm4che:dcm4che-core:5.25.0 and org.dcm4che:dcm4che-net:5.25.0
import org.dcm4che3.data.*;
import org.dcm4che3.net.*;
import org.dcm4che3.net.pdu.AAssociateRQ;
import org.dcm4che3.net.pdu.PresentationContext;
import org.dcm4che3.net.pdu.RoleSelection;
import org.dcm4che3.net.pdu.UserIdentityRQ;
// Client side representation of the connection. As a client, I will
// not be listening for incoming traffic (but I could choose to do so
// if I need to transfer data via MOVE)
Connection local = new Connection();
local.setHostname("client.on.network.com");
local.setPort(Connection.NOT_LISTENING);
// Remote side representation of the connection
Connection remote = new Connection();
remote.setHostname("pacs.on.network.com");
remote.setPort(4100);
remote.setTlsProtocols(local.getTlsProtocols());
remote.setTlsCipherSuites(local.getTlsCipherSuites());
// Calling application entity
ApplicationEntity ae = new ApplicationEntity("MeAsAServiceClassUser".toUpperCase());
ae.setAETitle("MeAsAServiceClassUser");
ae.addConnection(local); // on which we may not be listening
ae.setAssociationInitiator(true);
ae.setAssociationAcceptor(false);
// Device
Device device = new Device("MeAsAServiceClassUser".toLowerCase());
device.addConnection(local);
device.addApplicationEntity(ae);
// Configure association
AAssociateRQ rq = new AAssociateRQ();
rq.setCallingAET("MeAsAServiceClassUser");
rq.setCalledAET("NameThatIdentifiesTheProvider"); // e.g. "GEPACS"
rq.setImplVersionName("MY-SCU-1.0"); // Max 16 chars
// Credentials (if appropriate)
String username = "username";
String passcode = "so secret";
if (null != username && username.length() > 0 && null != passcode && passcode.length() > 0) {
rq.setUserIdentityRQ(UserIdentityRQ.usernamePasscode(username, passcode.toCharArray(), true));
}
例如,ping PACS(使用上面的设置):
String[] TRANSFER_SYNTAX_CHAIN = {
UID.ExplicitVRLittleEndian,
UID.ImplicitVRLittleEndian
};
// Define transfer capabilities for verification SOP class
ae.addTransferCapability(
new TransferCapability(null,
/* SOP Class */ UID.Verification,
/* Role */ TransferCapability.Role.SCU,
/* Transfer syntax */ TRANSFER_SYNTAX_CHAIN)
);
// Setup presentation context
rq.addPresentationContext(
new PresentationContext(
rq.getNumberOfPresentationContexts() * 2 + 1,
/* abstract syntax */ UID.Verification,
/* transfer syntax */ TRANSFER_SYNTAX_CHAIN
)
);
rq.addRoleSelection(new RoleSelection(UID.Verification, /* is SCU? */ true, /* is SCP? */ false));
try {
// 1) Open a connection to the SCP
Association association = ae.connect(local, remote, rq);
// 2) PING!
DimseRSP rsp = association.cecho();
rsp.next(); // Consume reply, which may fail
// Still here? Success!
// 3) Close the connection to the SCP
if (as.isReadyForDataTransfer()) {
as.waitForOutstandingRSP();
as.release();
}
} catch (Throwable ignore) {
// Failure
}
另一个例子,从给定登录号的 PACS 中检索研究;设置查询并处理结果:
String modality = null; // e.g. "OT"
String accessionNumber = "1234567890";
//--------------------------------------------------------
// HERE follows setup of a query, using an Attributes object
//--------------------------------------------------------
Attributes query = new Attributes();
// Indicate character set
{
int tag = Tag.SpecificCharacterSet;
VR vr = ElementDictionary.vrOf(tag, query.getPrivateCreator(tag));
query.setString(tag, vr, "ISO_IR 100");
}
// Study level query
{
int tag = Tag.QueryRetrieveLevel;
VR vr = ElementDictionary.vrOf(tag, query.getPrivateCreator(tag));
query.setString(tag, vr, "STUDY");
}
// Accession number
{
int tag = Tag.AccessionNumber;
VR vr = ElementDictionary.vrOf(tag, query.getPrivateCreator(tag));
query.setString(tag, vr, accessionNumber);
}
// Optionally filter on modality in study if 'modality' is provided,
// otherwise retrieve modality
{
int tag = Tag.ModalitiesInStudy;
VR vr = ElementDictionary.vrOf(tag, query.getPrivateCreator(tag));
if (null != modality && modality.length() > 0) {
query.setString(tag, vr, modality);
} else {
query.setNull(tag, vr);
}
}
// We are interested in study instance UID
{
int tag = Tag.StudyInstanceUID;
VR vr = ElementDictionary.vrOf(tag, query.getPrivateCreator(tag));
query.setNull(tag, vr);
}
// Do the actual query, needing an AppliationEntity (ae),
// a local (local) and remote (remote) Connection, and
// an AAssociateRQ (rq) set up earlier.
try {
// 1) Open a connection to the SCP
Association as = ae.connect(local, remote, rq);
// 2) Query
int priority = 0x0002; // low for the sake of demo :)
as.cfind(UID.StudyRootQueryRetrieveInformationModelFind, priority, query, null,
new DimseRSPHandler(as.nextMessageID()) {
@Override
public void onDimseRSP(Association assoc, Attributes cmd,
Attributes response) {
super.onDimseRSP(assoc, cmd, response);
int status = cmd.getInt(Tag.Status, -1);
if (Status.isPending(status)) {
//--------------------------------------------------------
// HERE follows handling of the response, which
// is just another Attributes object
//--------------------------------------------------------
String studyInstanceUID = response.getString(Tag.StudyInstanceUID);
// etc...
}
}
});
// 3) Close the connection to the SCP
if (as.isReadyForDataTransfer()) {
as.waitForOutstandingRSP();
as.release();
}
}
catch (Exception e) {
// Failure
}
关于java - 从 dcm4che2 迁移到 dcm4che3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31728477/
我想在远程 ubuntu 14.04 服务器上安装 Eclipse Che IDE。这是我所做的: 打开从我的笔记本电脑到 ubuntu 服务器的 SSH session ,以“useradm” 身份
我最近尝试在 Windows 10 64 位上安装 Eclipse Che。我安装了所有先决条件,但是当我运行 che.bat 时,它给了我以下消息: 我该怎么做才能解决这个问题? 最佳答案 此错误是
我在服务器上安装了 Eclipse Che,当我在本地使用它时,它在我的机器上运行完美 localhost:8080 我想让它在 NGINX 前端反向代理之后从 Internet 上可用。这是想法:
Eclipse Che被Eclipse官方称为下一代IDE,作为老牌的IDE,被其寄予厚望的Eclipse Che到底有什么特点,在这篇文章中我们来一探究竟。 开发团队的Kuberentes原生I
我已经在我的 Ubuntu 16.04 上安装了 Eclipse Che,并且我正在使用外部 IP 从远程计算机连接到我的 eclipse che。 我在我的 ubuntu 防火墙上打开了 8000,
我正在尝试从 multi-machine workspace 中的另一个 NodeJS 运行时连接到 MySQL 运行时中的数据库. 在测试中,我使用目标用户列表调用 API http://local
我对eclipse che很感兴趣,因此在codenvy上开了一个测试账号。我尝试了几个模板,到目前为止一切正常。 下https://eclipse.org/che/features/它说您可以“通过
我目前正在评估使用 Eclipse Che Cloud IDE 作为在 Jboss 上运行的现有项目本地运行 Eclipse Neon 的替代方案。 在 Eclipse Neon 中,在“首选项”下,
对于我的 Eclipse Che 项目,每次加载工作区时我都必须重新安装我的 python 模块 (blegh)。有没有办法将我的团队需要的模块安装到全局文件夹中,这样他们就不必在每次加载项目时都安装
本文整理了Java中org.eclipse.che.api.fs.server.WsPathUtils类的一些代码示例,展示了WsPathUtils类的具体用法。这些代码示例主要来源于Github/S
本文整理了Java中org.eclipse.che.plugin.yaml.shared.YamlDTO类的一些代码示例,展示了YamlDTO类的具体用法。这些代码示例主要来源于Github/Stac
本文整理了Java中org.eclipse.che.plugin.yaml.shared.YamlPreference类的一些代码示例,展示了YamlPreference类的具体用法。这些代码示例主要
有字体巴塘和一个字体 八塘车 ,其他韩文字体 Dotum、Gulim 和 Gungsuh 也是如此。但有什么区别呢? “车”是什么意思? 最佳答案 哦,终于,我们来了: http://blog.kor
可以 eclipse 车 用于传统的单体应用程序开发?不使用 Docker 的应用程序。如果可能的话,从桌面 Eclipse 迁移到 Eclipse Che 是一个不错的决定吗? Che 是否提供各种
使用 Eclipse Che,我最近能够按照说明中的说明毫无问题地部署 docker 容器。 我正试图了解更多关于 Che 扩展开发的知识,我正在阅读位于下一页上的“开发你的第一个插件”的简短介绍:
如何在 mac osx 上完全卸载 eclipse che? 使用 mac osx 安装程序来安装二进制文件。看来 che 总是在 8080 上运行,甚至杀死了进程并停止了 docker。 https
我正在尝试让 Eclipse-Che 在 EC2 上运行,但遇到了一些问题。如果我只映射端口 8080,我可以启动 Eclipse-Che 服务器,但随后我无法连接到任何工作区,大概是因为我缺少端口
我们有基于 xtext 的领域特定语言。对于语言表示,我们在 Eclipse 中有自己的编辑器。这个编辑器基本上是 Eclipse 插件。 有什么方法可以将这个 eclipse 编辑器插件移植到 Ch
我正在使用 openshift.io 上托管的 Eclipse Che 7 来开发一个简单的 java 项目。可以调试测试吗?我找不到启动它们的方法。如果我打开测试 View 有 最佳答案 总是可以使
我刚刚开始使用 Eclipse che 并启动了一个项目。我没有 Main 类,我想从 Console 包中名为 TBB_SQLBuilder.java 的类开始运行该项目。 我根本不知道如何运行它。
我是一名优秀的程序员,十分优秀!