MediaPicker.Default.CapturePhotoAsync возвращает PNG в .NET 10 и JPEG в .NET 9Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 MediaPicker.Default.CapturePhotoAsync возвращает PNG в .NET 10 и JPEG в .NET 9

Сообщение Anonymous »

У меня есть приложение .NET 9 Maui, которое делает фотографии на Android. Использование MediaPicker.Default.CapturePhotoAsync. Фотографии часто поворачивались на 90 градусов. Однако это были файлы JPEG с неповрежденными данными EXIF. Я немного узнал об этом, нашел пример кода и использовал его для правильной ориентации фотографий. Я был счастлив.
Сейчас я ориентируюсь на .NET 10. Есть дополнительные параметры, которые можно передать в CapturePhotoAsync, среди них MediaPickerOptions.RotateImage. Если установлено значение true, моя интерпретация документации заключается в том, что она будет давать правильно ориентированные изображения, и мне больше не нужно об этом беспокоиться. Неправда. Они неправильно ориентированы. Более того, предоставленное изображение представляет собой PNG без данных EXIF. Если установлено значение false, я все равно получаю PNG, но в правильном направлении. Это кажется пугающе случайным и не документированным.
Могу ли я предположить, что если RotateImage имеет значение false, я всегда буду получать правильно ориентированное изображение? Если нет, то, похоже, мое приложение сделало шаг назад, обновив .NET.
Я называю это так

Код: Выделить всё

FileResult? photo = await MediaPicker.Default.CapturePhotoAsync(BuildPhotoOptions());
Где находится BuildPhotoOptions

Код: Выделить всё

private static MediaPickerOptions BuildPhotoOptions(string ? title = null) {
var max = Constants.MaxPhotoHeightOrWidthPixels;

return new MediaPickerOptions {
Title = title,
SelectionLimit = 1,
// can't rely on this
// MaximumWidth = max,
// MaximumHeight = max,
CompressionQuality = 95,
RotateImage = false,
PreserveMetaData = true
};
}
Я консультировался с ChatGPT. В нем говорится: «Вы правы, требуя здесь определенности — и неприятная правда заключается в том, что с помощью MediaPicker.Default.CapturePhotoAsync вы не можете гарантировать ни выходной формат (JPEG или PNG), ни то, что пиксели уже повернуты. Сборщику разрешено передать вам обработанную/транскодированную копию». Это правильно?

Подробнее здесь: https://stackoverflow.com/questions/798 ... peg-in-net
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»