Как записать в файл (кодировать) измененные кадры камеры в Windows Phone 8

У меня есть специальное приложение для камеры в Windows Phone 8. Мне нужно добавить изображение водяного знака к каждому кадру из захвата камеры, а затем записать его на видео.

Я могу настроить каждый кадр из предварительного просмотра, используя следующий код:

int[] pixelData = new int[(int)(camera.PreviewResolution.Width * camera.PreviewResolution.Height)];

camera.GetPreviewBufferArgb32 (pixelData);

вернуть пиксельные данные;

и записать его обратно в превью.

моя проблема в том, что хотя я могу показывать кадры на экране, пока пользователь записывает фильм с помощью камеры, я не могу найти работающее решение для WP8 для кодирования кадров и звука для сохранения в файл.

Я уже безуспешно пробовал opencv, libav и другие, если кто-нибудь может указать мне правильное направление, я был бы очень признателен.


person user513790    schedule 21.08.2013    source источник
comment
Вы действительно не хотите этого делать, добавление водяного знака во время выполнения в управляемом коде - действительно плохая идея. Даже если бы вы добавляли его для каждого кадра в приемнике файлового потока, вы все равно не смогли бы сохранить видео в любом полезном месте, поскольку у вас нет доступа к MediaLibrary для видео.   -  person Claus Jørgensen    schedule 29.08.2013
comment
Я бы попробовал новый Nokia Lumia Imaging API. У этой штуки смешные библиотеки. Работает на всех телефонах Windows.   -  person Anthony Russell    schedule 29.08.2013
comment
Вы нашли какое-нибудь решение?   -  person prakash    schedule 13.01.2015


Ответы (1)


Вы можете сделать это так.

private void GetCameraPicture_Click(object sender, RoutedEventArgs e)
{
    Microsoft.Phone.Tasks.CameraCaptureTask cameraCaptureTask = new Microsoft.Phone.Tasks.CameraCaptureTask();
    cameraCaptureTask.Completed += cct_Completed;
    cameraCaptureTask.Show();
}

try
{
    if (e.TaskResult == Microsoft.Phone.Tasks.TaskResult.OK)
    {
        var imageStream = e.ChosenPhoto;
        var name = e.OriginalFileName;
        using (MemoryStream mem = new MemoryStream())
        {
            TextBlock tb = new TextBlock() { Text = DateTime.Now.ToString("dd MMM yyyy, HH:mm"), Foreground = new SolidColorBrush(Color.FromArgb(128, 0, 0, 0)), FontSize = 40 };
            BitmapImage finalImage = new BitmapImage();
            finalImage.SetSource(imageStream);
            WriteableBitmap wbFinal = new WriteableBitmap(finalImage);
            wbFinal.Render(tb, null);
            wbFinal.Invalidate();
            wbFinal.SaveJpeg(mem, wbFinal.PixelWidth, wbFinal.PixelHeight, 0, 100);
            mem.Seek(0, System.IO.SeekOrigin.Begin);
            MediaLibrary lib = new MediaLibrary();
            lib.SavePictureToCameraRoll("Copy" + name, mem.ToArray());
        }
    }
}
catch (Exception exp) { MessageBox.Show(exp.Message); }

Надеюсь, это поможет вам.

person Amit Singh    schedule 27.08.2013
comment
Его вопрос касался видео, а не аудио. А сторонние приложения не могут записывать видео в MediaLibrary. - person Claus Jørgensen; 29.08.2013