// Create a 256 x 256 Secondary Capture Image Storage static private void CreateSmallDICOM(string fileName) { using (var writer = new gdcm.PixmapWriter()) { gdcm.Pixmap img = writer.GetImage(); img.SetNumberOfDimensions(3); img.SetDimension(0, 512); img.SetDimension(1, 512); img.SetDimension(2, 2); // fake a 3d volume PhotometricInterpretation pi = new PhotometricInterpretation(PhotometricInterpretation.PIType.MONOCHROME2); img.SetPhotometricInterpretation(pi); gdcm.DataElement pixeldata = new gdcm.DataElement(new gdcm.Tag(0x7fe0, 0x0010)); byte[] buffer = new byte[512 * 512 * 2]; pixeldata.SetByteValue(buffer, new gdcm.VL((uint)buffer.Length)); img.SetDataElement(pixeldata); gdcm.File file = writer.GetFile(); gdcm.DataSet ds = file.GetDataSet(); gdcm.DataElement ms = new gdcm.DataElement(new gdcm.Tag(0x0008, 0x0016)); string mediastorage = "1.2.840.10008.5.1.4.1.1.7.2"; // Multi-frame Grayscale Byte Secondary Capture Image Storage byte[] val = StrToByteArray(mediastorage); ms.SetByteValue(val, new gdcm.VL((uint)val.Length)); ds.Insert(ms); writer.SetFileName(fileName); writer.Write(); } }
public static bool ProcessOneFile(string filename, string outfilename) { PixmapReader reader = new PixmapReader(); reader.SetFileName(filename); if (!reader.Read()) { System.Console.WriteLine("Could not read: " + filename); return(false); } ImageChangeTransferSyntax change = new ImageChangeTransferSyntax(); change.SetForce(false); // do we really want to recompress when input is alread compressed in same alg ? change.SetCompressIconImage(false); // Keep it simple change.SetTransferSyntax(new TransferSyntax(TransferSyntax.TSType.JPEG2000Lossless)); change.SetInput(reader.GetPixmap()); if (!change.Change()) { System.Console.WriteLine("Could not change: " + filename); return(false); } gdcm.FileMetaInformation fmi = reader.GetFile().GetHeader(); // The following three lines make sure to regenerate any value: fmi.Remove(new gdcm.Tag(0x0002, 0x0012)); fmi.Remove(new gdcm.Tag(0x0002, 0x0013)); fmi.Remove(new gdcm.Tag(0x0002, 0x0016)); PixmapWriter writer = new PixmapWriter(); writer.SetFileName(outfilename); writer.SetFile(reader.GetFile()); gdcm.Bitmap bitout = change.GetOutput(); gdcm.Pixmap pixout = (gdcm.Pixmap)bitout; //System.Console.WriteLine( "Debug: " + pixout.toString() ); writer.SetPixmap(pixout); if (!writer.Write()) { System.Console.WriteLine("Could not write: " + outfilename); return(false); } return(true); }