2014-01-21 61 views
0

在前面的問題我前一段時間問,我可以寫一個圖像DICOM的,但現在我需要寫在幀中的兩個或更多的JPG圖像作爲序列中迪康file.Using dcm4che3.Please誰能幫助?我怎麼能寫一個以上的JPG圖像DICOM文件使用Dcm4che3?

public static void main(String[] args) throws Exception { 
    Attributes attrs = new Attributes(); 
    String ts = UID.JPEG2000; 
    Attributes fmi = Attributes.createFileMetaInformation("1.2.3", UID.MRImageStorage , ts); 
    File f = new File("/tmp/taylor.jpg"); 
    BufferedImage vf = ImageIO.read(f); 
    attrs.setString(Tag.PatientName, VR.AE, "Test"); 
    attrs.setString(Tag.PatientSex, VR.CS, "M"); 
    attrs.setString(Tag.PatientID, VR.CS, "10"); 
    attrs.setString(Tag.PatientBirthDate, VR.AS, "19861010"); 
    attrs.setString(Tag.StudyDate, VR.AS, "20140126"); 
    attrs.setString(Tag.SeriesDate, VR.AS, "20140126"); 
    attrs.setString(Tag.StudyTime, VR.AS, "101010"); 
    attrs.setString(Tag.SeriesTime, VR.AS, "101010"); 
    attrs.setString(Tag.StudyDescription, VR.AS, "Test #1"); 
    attrs.setString(Tag.SeriesDescription, VR.AS, "Test #2"); 
    attrs.setString(Tag.Modality, VR.CS, "MR"); 
    attrs.setInt(Tag.Columns, VR.US, vf.getWidth()); 
    attrs.setInt(Tag.Rows, VR.US, vf.getHeight()); 
    attrs.setInt(Tag.InstanceNumber, VR.US, 1); 
    attrs.setInt(Tag.SamplesPerPixel, VR.IS, 3); 
    attrs.setString(Tag.PhotometricInterpretation, VR.CS, "MONOCHROME2"); 
    attrs.setInt(Tag.BitsAllocated, VR.IS, 8); 
    attrs.setInt(Tag.BitsStored, VR.IS, 8); 
    attrs.setInt(Tag.NumberOfFrames, VR.IS, 5); 
    attrs.setInt(Tag.SeriesNumber, VR.IS, 2); 


    DataBufferByte buff = (DataBufferByte) vf.getData().getDataBuffer(); 
    Fragments fr = attrs.newFragments(Tag.PixelData, VR.OW, 1); 
    for (int i = 0; i < 5; i++) { 
     fr.add(buff.getData(0)); 
    } 
    attrs.trimToSize(); 
    File fi = new File("/tmp/test.dcm"); 
    System.out.println(fi.getCanonicalPath()); 
    System.out.println(fmi); 
    System.out.println(attrs); 
    DicomOutputStream dos = new DicomOutputStream(fi); 
    dos.writeDataset(fmi, attrs); 
    dos.finish(); 
    dos.close(); 
} 

此代碼是創建dcm文件,但我無法用Weasis查看器打開它。

回答

0

使用我給你的previously你會遍歷你所有的JPG圖像並連接字節。將連接的字節設置爲像素數據。

然後加入

attribs.setInt(Tag.NumberOFFrames, VR.**, numberOfImages); 

到DICOM報頭。我不記得這個標籤的VR應該是什麼,所以請檢查DICOM標準。

編輯1

我會重新設定像素數據作爲

byte[] buffbytes = buff.getData(0); 
    byte[] b = new byte[5*buff.getData(0).length]; 
    for (int i = 0; i < 5; i++) { 
     System.arraycopy(buffbytes, 0, b, i*buffbytes.length, buffbytes.length); 
    } 

    attrs.setBytes(Tag.PixelData, VR.OW, b); 
+0

日Thnx的幫助,,我想你是有什麼建議,但我有一個java.io.EOFException的,沒你自己試過了嗎? – user3136641

+0

我以前做過很多次類似的事情。你可以在你的問題中發佈你的代碼嗎? –

+0

我發佈了我的最後一個測試代碼 – user3136641