// Decompiled by DJ v3.7.7.81 Copyright 2004 Atanas Neshkov  Date: 2006-3-15 14:14:48
// Home Page : http://members.fortunecity.com/neshkov/dj.html  - Check often for new version!
// Decompiler options: packimports(3) import java.awt.image.*;
import java.io.*;
import java.util.Iterator;
import javax.imageio.*;
import jdcm.*;
import jdcm.imageio.DCMMetadata;public class Img2dcm
{    public Img2dcm()
    {
    }    public void convertJPEG(BufferedImage bufferedimage, String s, String s1, String s2)
        throws Exception
    {
        int i = bufferedimage.getWidth();
        int j = bufferedimage.getHeight();
        int k = bufferedimage.getData().getNumBands();
        int l = bufferedimage.getSampleModel().getSampleSize(0);
        int i1 = l;
        int j1 = i1 - 1;
        DicomSet dicomset;
        if(s2 != null)
        {
            DCMMetadata dcmmetadata = new DCMMetadata(s2);//方法内容见后面            dicomset = dcmmetadata.getDicomSet();
        } else
        {
            dicomset = new DicomSet();
        }
        dicomset.setElement(new DicomElement(8, 24, "UI", StaticProperties.UIDGenerator()));
        dicomset.setElement(new DicomElement(8, 22, "UI", "1.2.840.10008.5.1.4.1.1.7"));
        dicomset.setElement(new DicomElement(40, 2, "US", k));
        dicomset.setElement(new DicomElement(40, 16, "US", j));
        dicomset.setElement(new DicomElement(40, 17, "US", i));
        dicomset.setElement(new DicomElement(40, 256, "US", l));
        dicomset.setElement(new DicomElement(40, 257, "US", i1));
        dicomset.setElement(new DicomElement(40, 258, "US", j1));
        dicomset.setElement(new DicomElement(40, 259, "US", 0));
        if(k == 1)
            dicomset.setElement(new DicomElement(40, 4, "CS", "MONOCHROME1"));
        else
        if(k == 3)
        {
            dicomset.setElement(new DicomElement(40, 4, "CS", "RGB"));
            dicomset.setElement(new DicomElement(40, 6, "US", 0));
        }
        DicomFile dicomfile = new DicomFile(dicomset);
        dicomfile.setTransferSyntaxUID("1.2.840.10008.1.2.4.50");
        FileInputStream fileinputstream = new FileInputStream(s);
        int k1 = fileinputstream.available();
        byte abyte0[] = new byte[k1];
        fileinputstream.read(abyte0);
        DicomSequence dicomsequence = new DicomSequence(new byte[] {
            0, 0, 0, 0
        });
        dicomsequence.addFragment(abyte0);
        DicomElement dicomelement = new DicomElement(32736, 16, "SQ", dicomsequence);
        dicomset.setElement(dicomelement);
        dicomfile.write(s1);
    }    public static void helpMessage()
    {
        System.out.println("jdcm: img2dcm " + StaticProperties.IMPLEMENTATION_VERSION);
        System.out.println();
        System.out.println("usage: img2dcm [options] imgfile-in dcmfile-out");
        System.out.println();
        System.out.println("parameters:");
        System.out.println("    imgfile-in              IMAGE (JPEG, BMP,...) filename to be converted");
        System.out.println("    dcmfile-out             DICOM output filename");
        System.out.println();
        System.out.println("general options:");
        System.out.println("    --version               print version information and exit");
        System.out.println("    -v                      verbose mode, print processing details");
        System.out.println();
        System.out.println("input options:");
        System.out.println("    +mf                     XML metafile to incorporate in DICOM file");
    }    public static void main(String args[])
    {
        String s = null;
        String s1 = null;
        String s2 = null;
        try
        {
            int i = 0;
            for(boolean flag = false; !flag && i < args.length;)
            {
                if(args[i].equals("--version"))
                {
                    System.out.println(StaticProperties.IMPLEMENTATION_VERSION);
                    System.exit(0);
                }
                if(args[i].equals("-v"))
                {
                    StaticProperties.VERBOSE = true;
                    i++;
                }
                if(args[i].equals("+mf"))
                {
                    s = args[i + 1];
                    i += 2;
                } else
                {
                    flag = true;
                }
            }            if(i < args.length)
            {
                s1 = args[i];
                i++;
            } else
            {
                helpMessage();
                System.exit(0);
            }
            if(i < args.length)
            {
                s2 = args[i];
            } else
            {
                helpMessage();
                System.exit(0);
            }
            DCMMetadata dcmmetadata = null;
            if(s != null)
                dcmmetadata = new DCMMetadata(s);
            File file = new File(s1);
            javax.imageio.stream.ImageInputStream imageinputstream = ImageIO.createImageInputStream(file);
            Iterator iterator = ImageIO.getImageReaders(imageinputstream);
            ImageReader imagereader = (ImageReader)iterator.next();
            if(imagereader.getFormatName().equals("jpeg"))
            {
                Img2dcm img2dcm = new Img2dcm();
                BufferedImage bufferedimage1 = ImageIO.read(file);
                img2dcm.convertJPEG(bufferedimage1, s1, s2, s);
            } else
            {
                BufferedImage bufferedimage = ImageIO.read(file);
                String args1[] = ImageIO.getWriterFormatNames();
                Iterator iterator1 = ImageIO.getImageWritersByFormatName("dcm");
                ImageWriter imagewriter = (ImageWriter)iterator1.next();
                File file1 = new File(s2);
                imagewriter.setOutput(file1);
                imagewriter.write(dcmmetadata, new IIOImage(bufferedimage, null, null), null);
            }
        }
        catch(Exception exception)
        {
            exception.printStackTrace();
        }
    }
}
//metafilepublic DCMMetadata(String fileName) throws IOException {
try {
// Use an instance of ourselves as the SAX event handler
XMLDataSet handler = new XMLDataSet();   
// Use the default (non-validating) parser
SAXParserFactory factory = SAXParserFactory.newInstance();
//Parse the input 
SAXParser saxParser = factory.newSAXParser();
saxParser.parse(new File(fileName), handler);
handler.getDicomFile();
dicomSet = handler.getDicomFile().getDicomSet();
} catch(Exception e) {
e.printStackTrace();
}
}