Пример #1
0
 public static void WriteMaxLength(DICOMBinaryWriter dw, int length)
 {
     dw.Write((byte) ItemType.MAXIMUM_LENGTH);
     dw.WriteNullBytes(1); // Reserved Null Byte
     LengthWriter.WriteBigEndian(dw, 4, 2);
     LengthWriter.WriteBigEndian(dw, length, 4);
 }
Пример #2
0
 public static void WriteLittleEndian(DICOMBinaryWriter dw, VR vr, DICOMWriteSettings settings, int length)
 {
     byte[] lengthBytes = new byte[0];
     if (!(settings.TransferSyntax == TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN))
     {
         switch (VRDictionary.GetEncodingFromVR(vr))
         {
             case VREncoding.ExplicitLong:
                 dw.WriteNullBytes(2);
                 lengthBytes = BitConverter.GetBytes(length);
                 break;
             case VREncoding.ExplicitShort:
                 lengthBytes = BitConverter.GetBytes((short)length);
                 break;
             case VREncoding.Implicit:
                 lengthBytes = BitConverter.GetBytes(length);
                 break;
         }
     }
     else
     {
         lengthBytes =BitConverter.GetBytes(length);
     }
     dw.Write(lengthBytes);
 }
Пример #3
0
        public static void Write(DICOMBinaryWriter dw, VR vr, DICOMWriteSettings settings, int length)
        {
            var lengthBytes = BitConverter.GetBytes(length);

            if (settings.TransferSyntax != TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN)
            {
                switch (VRDictionary.GetEncodingFromVR(vr))
                {
                case VREncoding.ExplicitLong:
                    dw.WriteNullBytes(2);
                    lengthBytes = BitConverter.GetBytes(length);
                    break;

                case VREncoding.ExplicitShort:
                    lengthBytes = BitConverter.GetBytes((ushort)length);
                    if (length > 65536)
                    {
                        throw new ArgumentOutOfRangeException(
                                  "Length is greater than allowed for explicit VR syntax. Try using implicit VR");
                    }
                    break;

                case VREncoding.Implicit:
                    lengthBytes = BitConverter.GetBytes(length);
                    break;
                }
            }
            if (settings.TransferSyntax == TransferSyntax.EXPLICIT_VR_BIG_ENDIAN)
            {
                Array.Reverse(lengthBytes);
            }
            dw.Write(lengthBytes);
        }
Пример #4
0
 public byte[] Write()
 {
     var written = new byte[0];
     var stream = new MemoryStream();
     using (var dw = new DICOMBinaryWriter(stream))
     {
         dw.Write((byte)PDUType.A_ABORT);
         dw.WriteNullBytes(1); //Reserved Null byte
         LengthWriter.WriteBigEndian(dw, 4, 4);
         dw.WriteNullBytes(2); //Reserved Null bytes
         dw.Write((byte)Source);
         dw.Write((byte)Reason);
         written = stream.ToArray();
     }
     return written;
 }
Пример #5
0
 public static void Write(DICOMBinaryWriter dw, VR vr, DICOMWriteSettings settings, int length)
 {
     var lengthBytes = BitConverter.GetBytes(length);
     if (settings.TransferSyntax != TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN)
     {
         //Length byte size depends on VR Encoding
         switch (VRDictionary.GetEncodingFromVR(vr))
         {
             case VREncoding.ExplicitLong:
                 dw.WriteNullBytes(2);
                 lengthBytes = BitConverter.GetBytes(length);
                 break;
             case VREncoding.ExplicitShort:
                 lengthBytes = BitConverter.GetBytes((ushort) length);
                 if (length > 65536) { throw new ArgumentOutOfRangeException("Length is greater than allowed for explicit VR syntax. Try using implicit VR"); }
                 break;
             case VREncoding.Implicit:
                 lengthBytes = BitConverter.GetBytes(length);
                 break;
         }
     }
     if (settings.TransferSyntax == TransferSyntax.EXPLICIT_VR_BIG_ENDIAN)
     {
         Array.Reverse(lengthBytes);
     }
     dw.Write(lengthBytes);
 }
Пример #6
0
        public static void Write(DICOMBinaryWriter dw, VR vr, DICOMWriteSettings settings, int length)
        {
            var lengthBytes = new byte[0];

            if (!(settings.TransferSyntax == TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN))
            {
                switch (VRDictionary.GetEncodingFromVR(vr))
                {
                case VREncoding.ExplicitLong:
                    dw.WriteNullBytes(2);
                    lengthBytes = BitConverter.GetBytes(length);
                    break;

                case VREncoding.ExplicitShort:
                    lengthBytes = BitConverter.GetBytes((ushort)length);
                    break;

                case VREncoding.Implicit:
                    lengthBytes = BitConverter.GetBytes(length);
                    break;
                }
            }
            else if (settings.TransferSyntax == TransferSyntax.EXPLICIT_VR_BIG_ENDIAN)
            {
                lengthBytes = BitConverter.GetBytes(length);
                lengthBytes.Reverse();
            }
            else
            {
                //Explicit VR Little Endian
                lengthBytes = BitConverter.GetBytes(length);
            }
            dw.Write(lengthBytes);
        }
Пример #7
0
 public static void Write(DICOMBinaryWriter dw, VR vr, DICOMWriteSettings settings, int length)
 {
     var lengthBytes = BitConverter.GetBytes(length);
     if (settings.TransferSyntax != TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN)
     {
         //Length byte size depends on VR Encoding
         switch (VRDictionary.GetEncodingFromVR(vr))
         {
             case VREncoding.ExplicitLong:
                 dw.WriteNullBytes(2);
                 lengthBytes = BitConverter.GetBytes(length);
                 break;
             case VREncoding.ExplicitShort:
                 lengthBytes = BitConverter.GetBytes((ushort) length);
                 break;
             case VREncoding.Implicit:
                 lengthBytes = BitConverter.GetBytes(length);
                 break;
         }
     }
     if (settings.TransferSyntax == TransferSyntax.EXPLICIT_VR_BIG_ENDIAN)
     {
         Array.Reverse(lengthBytes);
     }
     dw.Write(lengthBytes);
 }
Пример #8
0
 private static void WriteIndefiniteLength(DICOMWriteSettings settings, DICOMBinaryWriter dw)
 {
     if (!(settings.TransferSyntax == TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN))
     {
         dw.WriteNullBytes(2);
     }
     dw.Write(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF });
 }
Пример #9
0
 private static void WriteIndefiniteLength(DICOMWriteSettings settings, DICOMBinaryWriter dw)
 {
     if (!(settings.TransferSyntax == TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN))
     {
         dw.WriteNullBytes(2);
     }
     dw.Write(new byte[] {0xFF, 0xFF, 0xFF, 0xFF});
 }
Пример #10
0
 private static void WriteUIDItem(DICOMBinaryWriter dw, ItemType iType, string uid)
 {
     if (!string.IsNullOrEmpty(uid))
     {
         dw.Write((byte) iType);
         dw.WriteNullBytes(1); // Reserved Null Byte
         LengthWriter.WriteBigEndian(dw, uid.Length, 2);
         dw.Write(uid);
     }
 }
Пример #11
0
 public static void WriteAsyncOperations(DICOMBinaryWriter dw, AsyncOperations ao)
 {
     if (ao != null)
     {
         dw.Write((byte) ItemType.ASYNCHRONOUS_OPERATIONS_WINDOW);
         dw.WriteNullBytes(1); // Reserved Null Byte
         LengthWriter.WriteBigEndian(dw, 4, 2);
         LengthWriter.WriteBigEndian(dw, ao.MaxInvokeOperations, 2);
         LengthWriter.WriteBigEndian(dw, ao.MaxPerformOperations, 2);
     }
 }
Пример #12
0
        private byte[] WriteBody()
        {
            var body = new byte[0];
            var stream = new MemoryStream();
            using (var dw = new DICOMBinaryWriter(stream))
            {
                //Main body
                LengthWriter.WriteBigEndian(dw, ProtocolVersion, 2); //Protocol Version
                dw.WriteNullBytes(2); //Reserved Null bytes
                dw.Write(CalledEntityTitle.PadRight(16));
                dw.Write(CallingEntityTitle.PadRight(16));
                dw.WriteNullBytes(32); //Reserved Null bytes
                ItemWriter.WriteApplicationContext(dw, ApplicationContext);
                foreach (PresentationContext pc in PresentationContexts)
                {
                    ItemWriter.WritePresentationCtxAcceptType(dw, pc);
                }
                ItemWriter.WriteUserInfo(dw, UserInfo);
                body = stream.ToArray();
            }

            return body;
        }
Пример #13
0
 public byte[] Write()
 {
     var written = new byte[0];
     using (var stream = new MemoryStream())
     {
         using (var dw = new DICOMBinaryWriter(stream))
         {
             dw.Write((byte) PDUType.P_DATA_TRANSFER);
             dw.WriteNullBytes(1); //Reserved Null byte
             byte[] items = WriteItems();
             LengthWriter.WriteBigEndian(dw, items.Length, 4);
             dw.Write(items);
             written = stream.ToArray();
         }
     }
     return written;
 }
Пример #14
0
 public byte[] Write()
 {
     var written = new byte[0];
     using (var stream = new MemoryStream())
     {
         using (var dw = new DICOMBinaryWriter(stream))
         {
             dw.Write((byte)PDUType.A_ASSOC_ACCEPT);
             dw.WriteNullBytes(1); //Reserved Null byte
             byte[] body = WriteBody();
             LengthWriter.WriteBigEndian(dw, body.Length, 4);
             dw.Write(body);
             written = stream.ToArray();
         }
     }
     return written;
 }
Пример #15
0
 public static void Write(DICOMBinaryWriter dw)
 {
     dw.WriteNullBytes(128);
     dw.Write("DICM");
 }
Пример #16
0
 public static void WritePresentationCtxAcceptType(DICOMBinaryWriter dw, PresentationContext pc)
 {
     dw.Write((byte) ItemType.PRESENTATION_CONTEXT_ACCEPT);
     dw.WriteNullBytes(1); //Reserved Null Byte
     byte[] internBytes; //Will use to get length
     using (var stream = new MemoryStream())
     {
         using (var intern = new DICOMBinaryWriter(stream))
         {
             intern.Write((byte) pc.Id);
             intern.WriteNullBytes(1);
             intern.Write((byte) pc.Reason);
             intern.WriteNullBytes(1);
             WriteTransferSyntax(intern, pc.TransferSyntaxes.First());
             internBytes = stream.ToArray();
         }
     }
     LengthWriter.WriteBigEndian(dw, internBytes.Length, 2);
     dw.Write(internBytes);
 }
Пример #17
0
 public static void Write(DICOMBinaryWriter dw)
 {
     dw.WriteNullBytes(128);
     dw.Write("DICM");
 }
Пример #18
0
 public static void WriteUserInfo(DICOMBinaryWriter dw, UserInfo info)
 {
     dw.Write((byte) ItemType.USER_INFO);
     dw.WriteNullBytes(1); // Reserved Null Byte
     var body = new byte[0];
     using (var stream = new MemoryStream()) //Will write inner object to get length
     {
         using (var wr = new DICOMBinaryWriter(stream))
         {
             WriteMaxLength(wr, info.MaxPDULength);
             WriteImplementationClassUID(wr, info.ImplementationUID);
             WriteAsyncOperations(wr, info.AsynchronousOperations);
             WriteImplementationVersion(wr, info.ImplementationVersion);
             body = stream.ToArray();
         }
     }
     LengthWriter.WriteBigEndian(dw, body.Length, 2);
     dw.Write(body);
 }