как сжать/изменить размер изображения в windows phone 8

Я создаю проект, в котором я хочу сжать изображение, чтобы его можно было легко загрузить в Windows Azure, а затем можно было легко получить из Windows Azure в мое приложение. Не могли бы вы помочь мне с тем, как я могу это сделать. Я использую BitmapImage прямо сейчас. Ниже приведен код, который я использую для загрузки изображения в лазурь.

void photoChooserTask_Completed (отправитель объекта, PhotoResult e) {

        if (e.TaskResult == TaskResult.OK)
        {

            BitmapImage bitmap = new BitmapImage();
            bitmap.SetSource(e.ChosenPhoto);
            WriteableBitmap wb = new WriteableBitmap(bitmap);                
            using (MemoryStream stream = new MemoryStream())
            {


                wb.SaveJpeg(stream, wb.PixelWidth, wb.PixelHeight, 0, 0);
                AzureStorage storage = new AzureStorage();
                storage.Account = **azure account**;
                storage.BlobEndPoint = **azure end point**;
                storage.Key = **azure key**;

                string fileName = uid;

                bool error = false;
                if (!error)
                {

                        storage.PutBlob("workerimages", fileName, imageBytes, error);

                }
                else
                {
                    MessageBox.Show("Error uploading the new image.");
                }

            }

        }
    }

person Nikhil Sharma    schedule 24.03.2014    source источник
comment
Когда вы делаете wb.SaveJpeg, почему бы просто не использовать меньшие значения ширины/высоты?   -  person Igor Ralic    schedule 24.03.2014
comment
Попробуйте использовать Nokia Image SDK для работы с изображениями, он предоставляет множество высококачественных инструментов для обработки изображений.   -  person Viacheslav Smityukh    schedule 24.03.2014
comment
stackoverflow.com/questions/22163959/ перейдите по этой ссылке, WriteableBitmapExtensions имеет полезный для вас метод Resize   -  person Jaihind    schedule 25.03.2014


Ответы (1)


Будьте осторожны при использовании WriteableBitmap, так как у вас может не хватить памяти при изменении размера большого количества изображений. Если у вас их всего несколько, передайте размер, который вы хотите сохранить, методу SaveJpeg. Также убедитесь, что вы используете значение выше 0 для качества (последний параметр SaveJpeg).

var width = wb.PixelWidth/4;
var height = wb.PixelHeight/4;

using (MemoryStream stream = new MemoryStream())
{
    wb.SaveJpeg(stream, width, height, 0, 100);
    ...
    ...
}

Вы также можете использовать JpegRenderer из Nokia Imaging SDK для изменения размера изображения.

var width = wb.PixelWidth/4;
var height = wb.PixelHeight/4;
using (var imageProvider = new StreamImageSource(e.ChosenPhoto))
{
    IFilterEffect effect = new FilterEffect(imageProvider);

    // Get the resize dimensions
    Windows.Foundation.Size desiredSize = new Windows.Foundation.Size(width, height);

    using (var renderer = new JpegRenderer(effect))
    {
        renderer.OutputOption = OutputOption.PreserveAspectRatio;

        // set the new size of the image
        renderer.Size = desiredSize;

        IBuffer buffer = await renderer.RenderAsync();
        return buffer;
    }
}
person Shawn Kendrot    schedule 24.03.2014
comment
wb.SaveJpeg (поток, ширина, высота, 0,100) не работает - person Nikhil Sharma; 25.03.2014
comment
см., я добавил два текстовых блока, чтобы проверить, уменьшается ли размер изображения или нет, и для этого я в первую очередь для первого текстового блока я установил источник перед методом wb.saveJpeg, т.е. TB1.Text = wb.PixelWidth, и после этого я использую wb.SaveJpeg(stream,width,height,0,100), а затем во втором текстовом блоке я передаю то же значение, т.е. Tb2.Text = wb.PixelWidth, тогда он должен показывать уменьшенную ширину в TB2, но вместо этого я получаю такое же значение в оба туберкулёза - person Nikhil Sharma; 26.03.2014
comment
Метод SaveJpeg сохраняет новое изображение в поток в первом параметре. Он не будет обновлять текущий WriteableBitmap. Если вы хотите увидеть размер, создайте новый Bitmap из потока или сохраните файл и откройте его. - person Shawn Kendrot; 26.03.2014