2014-04-07 2 views
0

Я использую следующий код для декодирования JPGE изображениеJpegBitmapDecoder декодировать jpeg не удалось?

UnmanagedMemoryStream^ mStream = gcnew UnmanagedMemoryStream(_jpegDataBuff, _buffLength); 
JpegBitmapDecoder^ decoder = gcnew JpegBitmapDecoder(mStream, BitmapCreateOptions::PreservePixelFormat, BitmapCacheOption::OnLoad); 
BitmapSource^ bitmapSource = decoder->Frames[0]; 

Я использую bitmapSource для отображения на контроле WPF, но иногда результат, как показано ниже

enter image description here

Я искал очень много в интернете, но я еще не решил его!

Кто-нибудь может мне помочь?

Большое спасибо,

T & T

+1

Из внешнего вида я бы сказал, что источник Jpeg является неполным или недействительным. Вы уверены, что правильно инициализировали '_jpegDataBuff' и' _buffLength'? –

+0

@PetrAbdulin: _jpegDataBuff - это данные, которые анализируются из потока IP-камеры, возможно, это вызвано _jpegDataBuff является неполным. Как проверить, что данные _jpegDataBuff являются исчерпывающими или нет? И если он неполный, почему JpegBitmapDecoder не выдал никакого исключения? Спасибо! – TTGroup

+1

Я объяснил детали моего предположения в своем ответе. –

ответ

1

Судя по ней, я бы сказал, что либо источник JPEG является неполным или недействительным. Исключением являются только JpegBitmapDecoder throws: ArgumentNullException (поток null) и FileFormatException. Формат файла, скорее всего, определяется путем анализа заголовка файла. JIF/JFIF file structure содержит информацию описания изображения в относительно небольшом заголовке, за которым следуют «сырые» данные.

Я думаю, что декодер построен устойчиво, чтобы игнорировать недопустимые (отображенные последние до серого) и/или отсутствующие (визуализированные серые) блоки. Я думаю, что единственный способ обнаружить - либо проанализировать окончательное изображение (возможно, проверить, что последний блок 8x8px не имеет того же цвета?) Или источник (возможно, подсчет блоков данных?).

+0

Большое спасибо! Я попробую проверить последний 8x8 пикселей, как вы сказали. Но что значит «возможно подсчет блоков данных»? имею в виду? Пожалуйста, объясните мне более подробно. Спасибо! – TTGroup

+1

@TTGroup, потому что я не знаю точной структуры блоков данных необработанного изображения. Может быть, это и легко проверить, может быть, нет. В принципе, если каждый блок имеет * несжатое поле «размер», это тривиально, но я не уверен, что это так. –

+0

до сих пор, я не знаю, почему причина вызвала эту проблему, но ваш ответ может быть подходящим для этого случая. Спасибо! – TTGroup

Смежные вопросы