private static VoiLutSequenceItem SerializeDataLut(IDataLut voiLut) { int inputLength = voiLut.Data.Length; int[] descriptor = new int[3]; descriptor[0] = inputLength; if (descriptor[0] == 65536) { descriptor[0] = 0; } descriptor[1] = voiLut.FirstMappedPixelValue; descriptor[2] = 16; ushort[] data = new ushort[inputLength]; unsafe { fixed(ushort *output = data) { fixed(int *input = voiLut.Data) { for (int n = 0; n < inputLength; n++) { output[n] = (ushort)(input[n] & 0x0000FFFF); } } } } VoiLutSequenceItem lutseq = new VoiLutSequenceItem(); lutseq.LutDescriptor = descriptor; lutseq.LutData = data; lutseq.LutExplanation = SR.LabelPresentationVoiDataLut; return(lutseq); }
protected void SerializeSoftcopyVoiLut(SoftcopyVoiLutModuleIod module, DicomPresentationImageCollection <T> images) { List <SoftcopyVoiLutModuleIod.SoftcopyVoiLutSequenceItem> voiLutSequenceItems = new List <SoftcopyVoiLutModuleIod.SoftcopyVoiLutSequenceItem>(); foreach (T image in images) { if (!image.VoiLutManager.Enabled) { continue; } SoftcopyVoiLutModuleIod.SoftcopyVoiLutSequenceItem sequenceItem = new SoftcopyVoiLutModuleIod.SoftcopyVoiLutSequenceItem(); sequenceItem.InitializeAttributes(); sequenceItem.ReferencedImageSequence = new ImageSopInstanceReferenceMacro[] { CreateImageSopInstanceReference(image.Frame) }; IVoiLut lut = image.VoiLutManager.VoiLut; if (lut is IDataLut) { IDataLut voiLut = (IDataLut)lut; sequenceItem.VoiLutSequence = new VoiLutSequenceItem[] { SerializeDataLut(voiLut) }; } else if (lut is IVoiLutLinear) { IVoiLutLinear voiLut = (IVoiLutLinear)lut; sequenceItem.WindowWidth = new double[] { voiLut.WindowWidth }; sequenceItem.WindowCenter = new double[] { voiLut.WindowCenter }; sequenceItem.WindowCenterWidthExplanation = new string[] { SR.LabelPresentationVoiLinearLut }; sequenceItem.VoiLutFunction = VoiLutFunction.Linear; // we don't support sigmoid } else { // should never happen - all VOI LUT object should implement either interface continue; } voiLutSequenceItems.Add(sequenceItem); } if (voiLutSequenceItems.Count > 0) { module.SoftcopyVoiLutSequence = voiLutSequenceItems.ToArray(); } }