public override void Decode( DicomPixelData oldPixelData, DicomPixelData newPixelData, DicomCodecParams parameters) { if (oldPixelData.NumberOfFrames == 0) { return; } // IJG eats the extra padding bits. Is there a better way to test for this? if (newPixelData.BitsAllocated == 16 && newPixelData.BitsStored <= 8) { // check for embedded overlays here or below? newPixelData.BitsAllocated = 8; } var jparams = parameters as DicomJpegParams ?? GetDefaultParameters() as DicomJpegParams; var oldNativeData = oldPixelData.ToNativePixelData(); int precision; try { try { precision = JpegHelper.ScanJpegForBitDepth(oldPixelData); } catch { // if the internal scanner chokes on an image, try again using ijg precision = new Jpeg12Codec(JpegMode.Baseline, 0, 0).ScanHeaderForPrecision(oldNativeData); } } catch { // the old scanner choked on several valid images... // assume the correct encoder was used and let libijg handle the rest precision = oldPixelData.BitsStored; } if (newPixelData.BitsStored <= 8 && precision > 8) { newPixelData.BitsAllocated = 16; // embedded overlay? } var codec = GetCodec(precision, jparams); var newNativeData = newPixelData.ToNativePixelData(); var jNativeParams = jparams.ToNativeJpegParameters(); for (var frame = 0; frame < oldPixelData.NumberOfFrames; frame++) { codec.Decode(oldNativeData, newNativeData, jNativeParams, frame); } }
public override void Decode( DicomPixelData oldPixelData, DicomPixelData newPixelData, DicomCodecParams parameters) { if (oldPixelData.NumberOfFrames == 0) return; // IJG eats the extra padding bits. Is there a better way to test for this? if (newPixelData.BitsAllocated == 16 && newPixelData.BitsStored <= 8) { // check for embedded overlays here or below? newPixelData.BitsAllocated = 8; } var jparams = parameters as DicomJpegParams ?? GetDefaultParameters() as DicomJpegParams; var oldNativeData = oldPixelData.ToNativePixelData(); int precision; try { try { precision = JpegHelper.ScanJpegForBitDepth(oldPixelData); } catch { // if the internal scanner chokes on an image, try again using ijg precision = new Jpeg12Codec(JpegMode.Baseline, 0, 0).ScanHeaderForPrecision(oldNativeData); } } catch { // the old scanner choked on several valid images... // assume the correct encoder was used and let libijg handle the rest precision = oldPixelData.BitsStored; } if (newPixelData.BitsStored <= 8 && precision > 8) newPixelData.BitsAllocated = 16; // embedded overlay? var codec = GetCodec(precision, jparams); var newNativeData = newPixelData.ToNativePixelData(); var jNativeParams = jparams.ToNativeJpegParameters(); for (var frame = 0; frame < oldPixelData.NumberOfFrames; frame++) { codec.Decode(oldNativeData, newNativeData, jNativeParams, frame); } }