2015-03-01 4 views
0

Я разрабатываю видеопроигрыватель WPF C# с MediaElement.
Некоторые видеоролики содержат черные полосы сверху и снизу. Я хочу изменить размер изображения до 120%, чтобы при воспроизведении этих видео не отображались черные полосы.
Теперь вопрос в том, как я могу измерить размер черных полос. Если видео имеет высоту 800 пикселей, я хочу измерить высоту черных полос. Если в верхней части экрана есть 50 пикселей, а сверху снизу - 50 пикселей, я подсчитаю, что мне нужно изменить размер изображения, то есть до 112%.
Я предполагаю, что смогу сделать снимок экрана, а затем проанализировать эту картинку, чтобы узнать, сколько черных пикселей находится сверху и снизу (я не знаю, насколько это было бы сложно). Но я думаю, и надеюсь, что есть более простой способ сделать это. Есть идеи?Размер черных полос в видео?

+0

Вы уверены, что эти черные полосы являются видеоконтентом? Мне кажется, что речь идет о соотношении сторон и автоматическом подключении видеоконтента в контейнере «MediaElement». Вы пытались воспроизвести эти видео со «стандартными» медиаплеерами, например. г. Windows Media, VLC или MPC? – dymanoid

+0

@dymanoid: Я уверен, что это видео. Я понимаю ваш комментарий, и в некоторых случаях, очевидно, часть экрана не заполняется видео из-за соотношения сторон. Но есть несколько видеороликов, которые включают черные полосы. – Edgar

+1

Ну, это будет трудная работа. Прежде всего, вам нужно найти нечерный кадр в видео, и это может быть первый или 100-й кадр. Это непросто, используя только «MediaElement» WPF. Вы можете захватывать кадры один за другим, используя, например, 'RenderTargetBitmap', но это займет много времени, я полагаю. И пользователь сначала увидит немасштабированное видео во время поиска. Возможно, вам стоит рассмотреть DirectShow или Media Foundation для этой задачи. – dymanoid

ответ

0

Это начало моего ответа: я просто написал быстрое и грязное решение со снимком экрана.
Я использовал RenderTargetBitmap, чтобы создать снимок экрана с высотой видео, но шириной всего в 1 пиксель. Затем я использовал метод BitmapSource.CopyPixels для извлечения одиночных пикселей, а затем я зацикливал пиксели сверху вниз. Он работает, и он работает достаточно быстро для меня (< 30 мс для всей процедуры).
Я буду публиковать полный код, когда это будет сделано.
Меня все еще интересует, есть ли более простой способ сделать это. Мой собственный ответ - это всего лишь один ответ, но я рад принять что-то лучше как «ответ».

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