Writeablebitmap.SaveJpeg поворачивает мое изображение на -90 градусов - PullRequest
5 голосов
/ 07 мая 2011

Я использую следующий код, чтобы получить изображение из библиотеки MediaLibrary на телефоне и изменить его размер. В эмуляторе он работает нормально, но он поворачивает его на -90 градусов, когда я пробую его на реальном телефоне.

4-й параметр для SaveJpeg - это ориентация, и всплывающая подсказка говорит «Этот параметр в настоящее время не используется этим методом. Используйте значение 0 в качестве заполнителя.»

То же самое происходит, если я передаю 0,1, -1. Похоже, это может быть реализовано на телефоне, а не в эмуляторе, но я не знаю, что передать.

public byte[] GetPhoto(string photoName, int width, int height)
    {
        using (var ml = new Microsoft.Xna.Framework.Media.MediaLibrary())
        {
            using(Stream stream = (from p in ml.Pictures where p.Name == photoName select p).FirstOrDefault().GetImage())
            {
                //load the stream into a WriteableBitmap so it can be resized
                using(MemoryStream outstream = new MemoryStream())
                {
                    PictureDecoder.DecodeJpeg(stream).SaveJpeg(outstream, width, height, 0, 85);
                    return outstream.ToArray();
                }
            }
        }
    }

Также я только что заметил, что примеры фотографий на телефоне не имеют этой проблемы, только те, которые я сделал.

1 Ответ

2 голосов
/ 07 мая 2011

Я не думаю, что данные EXIF ​​для ориентации читаются WP7 (рад, что меня поправили, поскольку я пытался только, когда вышел CTP SDK). Однако вы можете вручную повернуть изображение, используя этот метод . Альтернатива, которую я не пробовал, может заключаться в том, чтобы получить преобразование поворота изображения и повернуть его на 90 градусов. Повороты преобразования могут работать быстрее, чем ручное смещение всех пикселей растрового изображения с возможностью записи.

...