are you just trying to render a given frame or extract frame x as an individual Dicom image?
here are 2 methods you can use
1. use render method
private void GenerateFrameList()
{
_framesList = new List<ImageSource>();
var numberofFrames = CurrenBinder.Dataset.Get<Int32>(DicomTag.NumberOfFrames);
for (var i = 0; i < numberofFrames; i++)
{
var imgSource = new DicomImage(CurrenBinder.Dataset).RenderImageSource(i);
imgSource.Freeze();
_framesList.Add(imgSource);
}
}2.Customer function to return a given frame as a DICOM image *****NOTE*******, this will not always pass validation rules
public static MemoryStream ExtractImageFromMultiframe(String virtualFileName)
{
var _logger = LogManager.GetCurrentClassLogger();
_logger.Trace(String.Format("ExtractImageFromMultiframe"));
if (!virtualFileName.ToUpper().Contains("-FRAME"))
throw new ArgumentOutOfRangeException("virtualFileName", "virtualFileName must specify the frame to extract from source multiframe");
// decipher key information from supplied virtual filename
var fileNameOnly = Path.GetFileNameWithoutExtension(virtualFileName);
var fileExtension = Path.GetExtension(virtualFileName);
var seriesPath = Path.GetDirectoryName(virtualFileName);
var frameNumberString = fileNameOnly.Substring(fileNameOnly.Length - 4);
var frameNumber = Convert.ToInt32(frameNumberString);
// determine the source file's name
var multiframeFile = fileNameOnly.Substring(0, fileNameOnly.IndexOf("-")) + fileExtension;
var multiFrameFullPath = Path.Combine(seriesPath, multiframeFile);
// load multiframe file
var image = new DicomImage(multiFrameFullPath, frameNumber);
_logger.Trace(String.Format("image : loaded"));
// get pixel data from dataset
var sourcePixelData = DicomPixelData.Create(image.Dataset);
// get frame from pixel data
var individualFrameData = sourcePixelData.GetFrame(frameNumber);
#region Generate and fill DICOM data set
var dataset = image.Dataset.Clone();
_logger.Trace(String.Format("DataSet Created"));
#endregion // Generate and fill DICOM data set
var pixelData = DicomPixelData.Create(dataset, true);
pixelData.BitsStored = image.Dataset.Get<ushort>(DicomTag.BitsStored);
pixelData.BitsAllocated = image.Dataset.Get<ushort>(DicomTag.BitsAllocated);
pixelData.SamplesPerPixel = image.Dataset.Get<ushort>(DicomTag.SamplesPerPixel);
pixelData.HighBit = image.Dataset.Get<ushort>(DicomTag.HighBit);
pixelData.PixelRepresentation = image.Dataset.Get<PixelRepresentation>(DicomTag.PixelRepresentation);
pixelData.PlanarConfiguration = image.Dataset.Get<PlanarConfiguration>(DicomTag.PlanarConfiguration);
pixelData.AddFrame(individualFrameData);
_logger.Trace(String.Format("pixelData Created"));
_logger.Trace(String.Format("DataSet : {0}", dataset));
var df = new DicomFile(dataset.Clone());
using (var ms = new MemoryStream())
{
df.Save(ms);
_logger.Trace(String.Format("Dataset saved"));
return ms;
}
}