0

着信関連付け要求の「実行中」に、特定の DICOM オブジェクト タグを読み取ろうとしています (そして、サード パーティのローカル データベースに保存しようとしています)。

関連付け要求を受け入れ、dicom ファイルをローカルに保存するために、修正版の dcmrcv() ツールを使用しました。より具体的には、次のような onCStoreRQ メソッドをオーバーライドしました。

@Override
protected void onCStoreRQ(Association association, int pcid, DicomObject dcmReqObj,
                                PDVInputStream dataStream, String transferSyntaxUID,
                                DicomObject dcmRspObj)
            throws DicomServiceException, IOException {

    final String classUID = dcmReqObj.getString(Tag.AffectedSOPClassUID);
    final String instanceUID = dcmReqObj.getString(Tag.AffectedSOPInstanceUID);

    config = new GlobalConfig();
    final File associationDir = config.getAssocDirFile();

    final String prefixedFileName = instanceUID;
    final String dicomFileBaseName = prefixedFileName + DICOM_FILE_EXTENSION;
    File dicomFile = new File(associationDir, dicomFileBaseName);
    assert !dicomFile.exists();

    final BasicDicomObject fileMetaDcmObj = new BasicDicomObject();
    fileMetaDcmObj.initFileMetaInformation(classUID, instanceUID, transferSyntaxUID);
    final DicomOutputStream outStream = new DicomOutputStream(new BufferedOutputStream(new FileOutputStream(dicomFile), 600000));

    //i would like somewhere here to extract some TAGS from incoming dicom object. By trying to do it using dataStream my dicom files
    //are getting corrupted!
    //System.out.println("StudyInstanceUID: " + dataStream.readDataset().getString(Tag.StudyInstanceUID));

    try {
        outStream.writeFileMetaInformation(fileMetaDcmObj);
        dataStream.copyTo(outStream);

    } finally {

        outStream.close();  
    }
        dicomFile.renameTo(new File(associationDir, dicomFileBaseName));
        System.out.println("DICOM file name: " + dicomFile.getName());
    }

    @Override
    public void associationAccepted(final AssociationAcceptEvent associationAcceptEvent) {
    ....
    @Override
    public void associationClosed(final AssociationCloseEvent associationCloseEvent) {
    ...
}

このコードの間のどこかで、dataStream を読み取り、特定のタグを解析してローカル データベースに保存するメソッドをインターセプトしたいと考えています。

ただし、dataStream を操作しようとするコード (開始時に読み取るだけ) を配置しようとすると、dicom ファイルが破損します。

PDVInputStream は java.io.InputStream を実装しています ....

入れようとしても:

System.out.println("StudyInstanceUID: " + dataStream.readDataset().getString(Tag.StudyInstanceUID));

datastream を outStream にコピーする前に ... dicom ファイルが破損しています (1KB のサイズ) ...

CStoreRQ アソシエーション リクエストでデータストリームを使用して情報を抽出するにはどうすればよいですか?

私の質問が明確であることを願っています...

4

1 に答える 1