C # Convert.ToBase64String всегда поворачивать мое изображение на 90 градусов против часовой стрелки - PullRequest
0 голосов
/ 25 марта 2019

Я работаю над функцией, которая делает фотографию и конвертирует ее в строку base64. Но по какой-то причине, и я попытался найти это, Convert.ToBase64String всегда поворачивает мое изображение на 90 градусов против часовой стрелки. Я пытался найти это, но не смог найти никого с проблемой similair. Вот код

    private async Task<string> GetPhotoBase64StringAsync(int compressionQuality = 50, PhotoSize photoSize = PhotoSize.Medium)
    {
        string filename = $"{DateTime.Now.ToString("MMddyyyy_Hmmtt")}.jpg";

        var photo = await UtilityService.OpenCameraAsync(filename, compressionQuality, photoSize);

        if (photo != null)
        {
            var bytes = await photo.GetStream().ConvertToBytes();
            var base64string = Convert.ToBase64String(bytes);
            return base64string
        }
        return string.Empty;
    }

photo - это объект, который возвращается используемым им плагином xamarin. Я точно знаю, что плагин возвращает изображение в правильной ориентации, потому что я отображал его позже, а он не поворачивался.

Проблема возникает, когда я конвертирую изображение в поток и из потока в base64. Если бы я установил точку останова на return base64string, скопировал и вставил строку base64 в онлайн-конверсию base64 в изображение, изображение получилось бы повернутым на 90 градусов против часовой стрелки.

я тоже пробовал var base64string = bytes.ToBase64String(); но это тоже не сработало.

Это так странно, и я никогда не сталкивался с этим раньше.

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

проблема была с плагином.Я использую MediaPlugin и должен был использовать другой метод getstream

var bytes = await photo.GetStreamWithImageRotatedForExternalStorage().ConvertToBytes();
var base64string = Convert.ToBase64String(bytes);
return base64string
0 голосов
/ 25 марта 2019

Вы пробовали старый добрый IO.MemoryStream вместо .ConvertToBytes()?

            byte[] bytes;
            using (var memoryStream = new System.IO.MemoryStream())
            {
                photo.GetStream().CopyTo(memoryStream);
                bytes = memoryStream.ToArray();
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...