Изменение размера BitmapImage wp7 - PullRequest
0 голосов
/ 14 августа 2011

Как заставить это работать на WP7?

private static Bitmap ResizeBitmap(Bitmap sourceBMP, int width, int height)
{
    Bitmap result = new Bitmap(width, height);
    using (Graphics g = Graphics.FromImage(result))
        g.DrawImage(sourceBMP, 0, 0, width, height);
    return result;
}

Ответы [ 3 ]

0 голосов
/ 06 января 2014

Вот как я уменьшаю изображение, выбранное из медиатеки или сделанное камерой, надеюсь, это поможет. Сохраняет соотношение сторон.

    private void PhotoChooserTaskCompleted(object sender, PhotoResult e)
    {
        if (e.TaskResult != TaskResult.OK) return;

        var bmp = new BitmapImage();
        bmp.SetSource(e.ChosenPhoto);

        var scaledDownImage = AspectScale(bmp, 640, 480);

        MyImage.Source = scaledDownImage;
    }

    private BitmapImage AspectScale(BitmapImage img, int maxWidth, int maxHeigh)
    {
        double scaleRatio;

        if (img.PixelWidth > img.PixelHeight)
            scaleRatio = (maxWidth/(double) img.PixelWidth);
        else
            scaleRatio = (maxHeigh/(double) img.PixelHeight);

        var scaledWidth = img.PixelWidth * scaleRatio;
        var scaledHeight = img.PixelHeight * scaleRatio;

        using (var mem = new MemoryStream())
        {
            var wb = new WriteableBitmap(img);
            wb.SaveJpeg(mem, (int)scaledWidth, (int)scaledHeight, 0, 100);
            mem.Seek(0, SeekOrigin.Begin);
            var bn = new BitmapImage();
            bn.SetSource(mem);
            return bn;
        }
    }
0 голосов
/ 07 января 2015

Вот как я уменьшил размер изображения, который слишком меньше 512 КБ, и сохранив изображение в изолированном хранилище, Внимание: просто новичок в Windows Phone, поэтому, пожалуйста, несите, как я кодирую

private void PhotoChooserTaskCompleted (отправитель объекта, PhotoResult e) { if (e.TaskResult! = TaskResult.OK) return;

  string Imgpath = "Rafiq.jpg";
                SaveToIsolatedStorage(e.ChosenPhoto, Imgpath);
}

Здесь, в этом методе, я передаю поток e.choosen и его имя файла

и сохранение изображения с измененным размером (размер изображения меньше 512 КБ) в изолированном хранилище, надеюсь, это вам поможет,

private void SaveToIsolatedStorage (Поток imageStream, строка fileName) { пытаться { using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication ()) {

                if (myIsolatedStorage.FileExists(fileName))
                {
                    myIsolatedStorage.DeleteFile(fileName);
                }
                IsolatedStorageFileStream fileStream = myIsolatedStorage.CreateFile(fileName);

                BitmapImage bitmap = new BitmapImage();
                bitmap.SetSource(imageStream);
                MessageBox.Show("ImageStream :"+ imageStream.Length.ToString());
                WriteableBitmap wb = new WriteableBitmap(bitmap);

         // reeducing less than 524288 byte array

                long compImageSize = 524288;
                long originalsize =  wb.ToByteArray().Length;

                if ((Convert.ToInt32(originalsize)) > compImageSize)
                {
                    WriteableBitmap wBitmap = new WriteableBitmap(bitmap);
                    int height = wBitmap.PixelHeight;
                    int width = wBitmap.PixelWidth;



                    while ((Convert.ToInt32(originalsize)) > compImageSize)
                    {
                        //  wb.Resize(Convert.ToInt32( wb.PixelWidth / 2), Convert.ToInt32(wb.PixelHeight / 2), WriteableBitmapExtensions.Interpolation.Bilinear);

                        // data = ChangeDimension(bitmap, Convert.ToInt32(bitmap.PixelWidth / 2), Convert.ToInt32(bitmap.PixelHeight / 2));

                        using (MemoryStream stream = new MemoryStream())
                        {
                            height = Convert.ToInt32(wBitmap.PixelHeight / 2);
                            width = Convert.ToInt32(wBitmap.PixelWidth / 2);

                            wBitmap.SaveJpeg(stream, width, height, 0, 100);
                            stream.Seek(0, SeekOrigin.Begin);
                            wBitmap.SetSource(stream);

                        }

                        originalsize = wBitmap.ToByteArray().Length;

                    }

                    wb.SaveJpeg(fileStream, width, height, 0, 100);
                }
                else
                {
                    wb.SaveJpeg(fileStream, wb.PixelWidth, wb.PixelHeight, 0, 100);
                }

                fileStream.Close();          


            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

надеюсь, что это помоглоПолный

0 голосов
/ 14 августа 2011

Вы на самом деле не описали, что именно вы хотите, вы просто хотите сделать изображение больше / меньше на экране? или получить доступ к значениям пикселей изображения с измененным размером?

  1. Чтобы отобразить растровое изображение с другим размером / масштабом, просто используйте элемент Image и установите его Width / Height по желанию. Фреймворк позаботится о его масштабировании.
  2. Если вам нужно получить значения в пикселях масштабированного результата, создайте WriteableBitmap из масштабированного изображения, описанного в (1).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...