DicomDataset ds = DicomFile.Open("smpte.dcm").Dataset;
DicomDataset seqds = new DicomDataset();
seqds.Add(new DicomTag(0x0029,0x0010, "SIEMENS MEDCOM HEADER"), "SIEMENS MEDCOM HEADER");
seqds.Add(new DicomTag(0x0029,0x1041, "SIEMENS MEDCOM HEADER"), "SOM 5 TPOS");
seqds.Add(new DicomTag(0x0029,0x1042, "SIEMENS MEDCOM HEADER"), "SOM 5 NULLPOSITION");
seqds.Add(new DicomTag(0x0029,0x1043, "SIEMENS MEDCOM HEADER"), "VB10A 20030626");
seqds.Add(new DicomTag(0x0029,0x1044, "SIEMENS MEDCOM HEADER"),
new byte[] {43,48,48,48,48,48,48,48,48,48,0,159});
ds.Add(new DicomTag(0x0029,0x1140, "SIEMENS MEDCOM HEADER"), seqds);
ds.Add(DicomTag.RequestedProcedureDescription, "CT ABDO/PELVIS");
DicomFile dfnew = new DicomFile(ds);
dfnew.Save("privateseq.dcm");
var client = new DicomClient();
var request = new DicomCStoreRequest(DicomFile.Open("privateseq.dcm"));
client.AddRequest(request);
client.Send(PACSIPaddress, PACSTCPport, false, AETitle, PACSAETitle);
DicomDataset ds = DicomFile.Open("privateseq.dcm").Dataset;
ds.Remove(new DicomTag(0x0029,0x1140));
DicomFile dfnew = new DicomFile(ds);
dfnew.Save("privateseqdeleted.dcm");
DicomDataset ds = DicomFile.Open("smpte.dcm").Dataset;
ds.Add(new DicomTag(0x0029,0x1041, "SIEMENS MEDCOM HEADER"), "some tag and dummy content for the nonce");
DicomDataset ds = DicomFile.Open("privateseq.dcm").Dataset;
foreach (DicomItem di in ds)
Console.WriteLine(di.Tag);
ds.Remove(new DicomTag(0x0029,0x1140));
See attached image... it only removes the private creater...
also
var client = new DicomClient();
var request = new DicomCStoreRequest(DicomFile.Open("privateseq.dcm"));
client.AddRequest(request);
client.Send(PACSIPaddress, PACSTCPport, false, AETitle, PACSAETitle);
does work however
var client = new DicomClient();
var request = new DicomCStoreRequest(Dataset));
client.AddRequest(request);
client.Send(PACSIPaddress, PACSTCPport, false, AETitle, PACSAETitle);
it fails
so summing up the problems are this..
remove tag known or private works - no problem
removing a known sequence works like a champ - no problem
removing a private sequence - fails
CStore seems to fail when unknown tags exist in the dateset and DicomCStoreRequest(Dataset) is used - fails
CStore request works as long as DicomCStoreRequest(DicomFile.Open("privateseq.dcm") or DicomCStoreRequest("privateseq.dcm")is used - no problem
using System;
using System.Collections;
using Dicom;
using Dicom.IO;
namespace PrivateTagFileSetOperations
{
class Program
{
[STAThread]
static void Main(string[] args)
{
try
{
DicomDataset ds = DicomFile.Open("smpte.dcm").Dataset;
ds.Add(new DicomTag(0x0029,0x0011, "SIEMENS MEDCOM HEADER"), "SIEMENS MEDCOM HEADER");
ds.Add(new DicomTag(0x0029,0x1141, "SIEMENS MEDCOM HEADER"), "tag to test");
DicomDataset seqds = new DicomDataset();
seqds.Add(new DicomTag(0x0029,0x0010, "SIEMENS MEDCOM HEADER"), "SIEMENS MEDCOM HEADER");
seqds.Add(new DicomTag(0x0029,0x1041, "SIEMENS MEDCOM HEADER"), "SOM 5 TPOS");
seqds.Add(new DicomTag(0x0029,0x1042, "SIEMENS MEDCOM HEADER"), "SOM 5 NULLPOSITION");
seqds.Add(new DicomTag(0x0029,0x1043, "SIEMENS MEDCOM HEADER"), "VB10A 20030626");
seqds.Add(new DicomTag(0x0029,0x1044, "SIEMENS MEDCOM HEADER"),
new byte[] {43,48,48,48,48,48,48,48,48,48,0,159});
ds.Add(new DicomTag(0x0029,0x1140, "SIEMENS MEDCOM HEADER"), seqds);
ds.Add(DicomTag.RequestedProcedureDescription, "CT ABDO/PELVIS");
foreach (DicomItem di in ds)
Console.WriteLine(di.Tag);
DicomFile dfnew = new DicomFile(ds);
dfnew.Save("privateseq.dcm");
}
catch (Exception e) { Console.WriteLine(e.Message); }
}
}
}
using System;
using System.Collections;
using Dicom;
using Dicom.IO;
namespace PrivateTagFileSetOperations
{
class Program
{
[STAThread]
static void Main(string[] args)
{
try
{
DicomDataset ds = DicomFile.Open("privateseq.dcm").Dataset;
foreach (DicomItem di in ds)
Console.WriteLine(di.Tag);
ds.Remove(new DicomTag(0x0029,0x1140, "SIEMENS MEDCOM HEADER"));
DicomFile dfnew = new DicomFile(ds);
dfnew.Save("privateseqdeleted.dcm");
}
catch (Exception e) { Console.WriteLine(e.Message); }
}
}
}
ds.Remove(new DicomTag(0x0029,0x1140)); - failsds.Remove(new DicomTag(0x0029,0x1140, "SIEMENS MEDCOM HEADER")); - fails
this was shown in the post that was deleted by someone
public void RemoveTag(DicomDataset dataset, DicomTag tag)
{
if (tag.IsPrivate)
{
var privateTag = dataset.GetPrivateTag(tag);
var creator = new DicomTag(privateTag.Group, 0x0010);
dataset.Remove(privateTag);
dataset.Remove(creator);//Remove creator also.
}
else
{
dataset.Remove(tag);
}
}
using System;
using System.IO;
using Dicom;
using Dicom.IO;
namespace PrivateTagFileSetOperations
{
class Program
{
[STAThread]
static void Main(string[] args)
{
if (args.Length<1) { Console.WriteLine("usage: delprivatetag dicomfilepath"); return; }
if (!File.Exists(args[0].ToString())) { Console.WriteLine("No such file"); return; }
string filename = Path.GetFullPath(args[0].ToString());
Console.WriteLine("Enter tag, either standard or private, to remove");
Console.WriteLine(" (like \"gggg,eeee\" or other parseable string):");
string strTag = Console.ReadLine();
try
{
DicomTag tagToRemove = DicomTag.Parse(strTag);
DicomDataset ds = DicomFile.Open(args[0].ToString()).Dataset;
ushort group = tagToRemove.Group;
ushort element = tagToRemove.Element;
int privatecreatorelement = (element & 0xFF00) >> 8;
string privatecreator = ds.Get<string>(new DicomTag(group, (ushort) privatecreatorelement));
foreach (DicomItem di in ds)
{
if (di.Tag.Group==group)
Console.WriteLine(di.Tag);
}
Console.WriteLine("///");
try
{
ds.Remove(new DicomTag(group, element, privatecreator));
}
catch
{
Console.WriteLine("No {0} tag in dataset.", strTag);
}
foreach (DicomItem di in ds)
{
if (di.Tag.Group==group)
Console.WriteLine(di.Tag);
}
Console.WriteLine("Press any key to continue..."); Console.ReadLine();
(new DicomFile(ds)).Save(String.Concat("PrivateElementRemoved-", args[0].ToString()));
}
catch (Exception e) { Console.WriteLine(e.Message); Console.ReadLine();}
}
}
}
DicomDictionary.Default[tag.PrivateCreator].Select(o => o.Tag)