Как получить Фотопоток после того, как им манипулировали, чтобы уменьшить размер - PullRequest
0 голосов
/ 26 января 2012

с помощью CameraCaptureTask для фотосъемки.

Проблема: поток не совпадает с g_stream = e.ChosenPhoto, когда я использую поток photostream = g_MS, который используется в функции ReduceSize ().

Я хочу получить поток, аналогичный g_stream = e.ChosenPhoto, после уменьшения размера фотографии в функции ReduceSize ().


 stream g_stream;
 BitmapImage g_bmp;
 MemoryStream g_MS = new MemoryStream();

void task_Completed(object sender, Microsoft.Phone.Tasks.PhotoResult e)
        {
            try
            {
                if (e.TaskResult == TaskResult.OK)
                {
                    g_bmp = new BitmapImage();

                    g_bmp.CreateOptions = BitmapCreateOptions.DelayCreation; 

                    g_bmp.SetSource(e.ChosenPhoto);

        g_stream = e.ChosenPhoto;

                    ReduceSize();

                }
            }
            catch (Exception ex)
            {

            }
        }

private void ReduceSize()
{

 string m_Filenm = "Testing.jpg";  

      WriteableBitmap wb = new WriteableBitmap(g_bmp);

     //--wb read byte into memorystream

     System.Windows.Media.Imaging.Extensions.SaveJpeg(wb, g_MS,800, 640, 0, 100);

    g_MS.Seek(0, SeekOrigin.Begin);             


   stream  photostream = g_MS;


    //------------------ Save
    //--save in the photo Library under Saved Photo Collection

      MediaLibrary ML = new MediaLibrary();

     ML.SavePicture(m_Filenm, g_MS);


}

1 Ответ

0 голосов
/ 26 января 2012

Просто извлеките поток из функции ReduceSize:

stream g_stream;
BitmapImage g_bmp;
MemoryStream g_MS = new MemoryStream();

void task_Completed(object sender, Microsoft.Phone.Tasks.PhotoResult e)
{
    try
    {
        if (e.TaskResult == TaskResult.OK)
        {
            g_bmp = new BitmapImage();

            g_bmp.CreateOptions = BitmapCreateOptions.DelayCreation;

            g_bmp.SetSource(e.ChosenPhoto);

            g_stream = ReduceSize();
        }
    }
    catch (Exception ex)
    {

    }
}

private Stream ReduceSize()
{
    string m_Filenm = "Testing.jpg";

    WriteableBitmap wb = new WriteableBitmap(g_bmp);

    //--wb read byte into memorystream

    System.Windows.Media.Imaging.Extensions.SaveJpeg(wb, g_MS, 800, 640, 0, 100);

    g_MS.Seek(0, SeekOrigin.Begin);

    stream photostream = g_MS;

    //------------------ Save
    //--save in the photo Library under Saved Photo Collection

    MediaLibrary ML = new MediaLibrary();

    ML.SavePicture(m_Filenm, g_MS);

    g_MS.Seek(0, SeekOrigin.Begin);
    return g_MS;
}

Учитывая, что MediaLibrary.SavePicture не закрывает поток, в противном случае вам придется сначала скопировать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...