Java 从Pacs服务器检索Dicom映像

Java 从Pacs服务器检索Dicom映像,java,dicom,Java,Dicom,我使用DcmQR从远程Pacs服务器查询/检索dicom映像,我能够按照指定的条件获取dicom对象列表。 1.写入dicom对象时,其大小仅为1KB。 2.打印对象数据时,其打印每个数据为空。 我是这方面的新手,请帮帮我( 我的代码: 公共静态void main(字符串参数[]){ dcmqr=新的dcmqr(“DCM4CHEE”); setcalledate(“DCM4CHEE”,true); dcmqr.setRemoteHost(“远程ip”); dcmqr.setRemotePort(

我使用DcmQR从远程Pacs服务器查询/检索dicom映像,我能够按照指定的条件获取dicom对象列表。 1.写入dicom对象时,其大小仅为1KB。 2.打印对象数据时,其打印每个数据为空。 我是这方面的新手,请帮帮我(

我的代码:
公共静态void main(字符串参数[]){
dcmqr=新的dcmqr(“DCM4CHEE”);
setcalledate(“DCM4CHEE”,true);
dcmqr.setRemoteHost(“远程ip”);
dcmqr.setRemotePort(远程端口);
dcmqr.getKeys();
dcmqr.setDateTimeMatching(true);
dcmqr.setCFind(真);
dcmqr.setCGet(真);
setQueryLevel(dcmqr.queryretrievel.IMAGE);
dcmqr.addMatchingKey(Tag.toTagPath(“PatientName”),“Vicens^DICOM”);
dcmqr.configureTransferCapability(true);
列表结果=空;
试一试{
dcmqr.start();
dcmqr.open();
result=dcmqr.query();
dcmqr.get(结果);
System.out.println(“列表大小:+result.Size());
显示对象详细信息(结果);
对于(双对象dco:结果){
字节数据[]=toByteArray(dco);
//这里怎么能得到dicom图像??
}
}捕获(例外e){
系统输出打印项次(“错误”+e);
}
试一试{
如果(dcmqr!=null){
dcmqr.stop();
dcmqr.close();
}
}捕获(例外e){
e、 printStackTrace();
}
}
//这里是toByteArray方法
私有静态字节[]toByteArray(DicomObject obj)引发IOException{
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
BufferedOutputStream bos=新的BufferedOutputStream(BAS);
DicomOutputStream dos=新的DicomOutputStream(bos);
dos.writeDicomFile(obj);
dos.close();
字节[]数据=baos.toByteArray();
返回数据;
}
//显示对象详细信息
私有静态void displayObjectDetails(列表结果){

dicom对象obj=new basicdicom对象();
List listimg=new ArrayList();
对于(int i=0;i
//输出 列表大小=8 实例编号:1 ImageType:空 ImageType:空 检索工具:DCM4CHEE SOPInstanceUID:1.3.12.2.1107.5.2.5.11090.5.0.582504825601085 PatientName:null PatientBirthDate:空 PatientSex:null ReferringPhysicianName:空 StudyDescription:空
序列说明:null

是否可能只保存查询响应?有两种方法可以从PACS检索图像,一种是发送C-MOVE,将移动目标AE设置为DICOM侦听器的AE。第二种方法虽然不常见,但是发送C-GET请求。

或者我可以在我的计算机上写入/存储DICOM图像吗本地系统???尝试删除
dcmqr.setCFind(true);
部分,仅使用CGet.Hi Gilberto,非常感谢您的回复。我对dcmdr.setCFind(true)进行了注释;但是输出是相同的,所有内容都是空的。当我尝试获取bufferediamge时:bais=newbytearrayinputstream(dicomData);iter=ImageIO.getImageReadersByFormatName(“DICOM”);reader=(ImageReader)iter.next();param=reader.getDefaultReadParam();ImageInputStream iis=ImageIO.CreateMageInputStream(BAI);reader.setInput(iis,false);bufferImage=reader.read(0,param);}其给定的java.lang.ArrayIndexOutOfBoundsException:第//bufferImage=reader.read(0,param)行的0;请帮助文档中给出的cli示例是“dcmqr-L dcmqrDCM4CHEE@RadiologyServer:11112-q00100020=QCTEST1-q00100021=JHH-cget-cstore 1.2.840.10008.5.1.4.1.1.128-cstoredest C:\Test“您使用了什么命令?您知道要检索的对象的sop类UID吗?您好,LEADTOOLS,谢谢您的回复。我已经完成了,并且使用c-move运行良好。
     My code :

    public static void main(String args[]){

    dcmqr = new DcmQR("DCM4CHEE");
    dcmqr.setCalledAET("DCM4CHEE", true);
    dcmqr.setRemoteHost("remote ip");
    dcmqr.setRemotePort(remote port);
    dcmqr.getKeys();
    dcmqr.setDateTimeMatching(true);
    dcmqr.setCFind(true);
    dcmqr.setCGet(true);


    dcmqr.setQueryLevel(DcmQR.QueryRetrieveLevel.IMAGE);
    dcmqr.addMatchingKey(Tag.toTagPath("PatientName"),"Vicens^DICOM");
    dcmqr.configureTransferCapability(true);

    List<DicomObject> result = null;    
    try {
    dcmqr.start();
    dcmqr.open();
    result = dcmqr.query();
    dcmqr.get(result);
    System.out.println("List Size : " + result.size());
    displayObjectDetails(result);
    for (DicomObject dco : result) {
               Byte data[] = toByteArray(dco);

               // here how can get dicom image ??


    }

    } catch (Exception e) {
        System.out.println("error " + e);
    }
    try {
      if (dcmqr != null) {
        dcmqr.stop();
        dcmqr.close();
      }
    } catch (Exception e) {
       e.printStackTrace();
      }
    }

// toByteArray Method here 
private static byte[] toByteArray(DicomObject obj) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        BufferedOutputStream bos = new BufferedOutputStream(baos);
        DicomOutputStream dos = new DicomOutputStream(bos);
        dos.writeDicomFile(obj);
        dos.close();          
        byte[] data = baos.toByteArray();  
        return data;
}

// display object details
DicomObject obj = new BasicDicomObject();
List<String> listimg = new ArrayList<String>();
for (int i = 0; i < resultimg.size(); i++) {
    obj = resultimg.get(i);

    System.out.println("InstanceNumber : "+obj.getString(Tag.InstanceNumber, VR.IS));
    System.out.println("ImageType : "+obj.getString(Tag.ImageType, VR.CS));
    System.out.println("ImageID : "+obj.getString(Tag.ImageID, VR.SH));
    System.out.println("RetrieveAETitle : "+obj.getString(Tag.RetrieveAETitle, VR.AE));
    System.out.println("SOPInstanceUID : "+obj.getString(Tag.SOPInstanceUID, VR.UI));

    System.out.println("PatientName : "+obj.getString(Tag.PatientName, VR.PN));
    System.out.println("PatientBirthDate : "+obj.getString(Tag.PatientBirthDate, VR.DA));
    System.out.println("PatientSex : "+obj.getString(Tag.PatientSex, VR.CS));
    System.out.println("ReferringPhysicianName : "+obj.getString(Tag.ReferringPhysicianName, VR.PN));
    System.out.println("StudyDescription : "+obj.getString(Tag.StudyDescription, VR.LO));
    System.out.println("SeriesDescription : "+obj.getString(Tag.SeriesDescription, VR.LO));

    }