я уже прочитал много постов на Stack о изменении размера и качестве изображения восстановителя, но не из них был о снижении качества до определенного физического дискового пространстваC# StorageFile изображения изменять размер определенного количества байт
У меня есть код, который делает снимок:
private async void TakeAPhoto_Click(object sender, RoutedEventArgs e)
{
CameraCaptureUI captureUI = new CameraCaptureUI();
captureUI.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Jpeg;
StorageFile photo = await captureUI.CaptureFileAsync(CameraCaptureUIMode.Photo);
if (photo != null)
{
}
}
Теперь мне нужно отправить данные на сервер, но прежде, я должен убедиться, что фото не более 3 МБ.
Так я это сделать:
BasicProperties pro = await photo.GetBasicPropertiesAsync();
if (pro.Size < 3072)
{
// SEND THE FILE TO SERVER
}
else
{
// DECREASE QUALITY BEFORE SENDING
}
Таким образом, вопрос о ELSE блок
Есть ли лучше или, может быть, я пропустил некоторые встроенные в подход, чтобы соответствовать изображение в определенное количество мегабайт, уменьшив его качество?
Так как это сделать:
while (pro.Size <= 3072)
{
photo = // some logic to decrease quality on 10%
}
Не очень хорошо выглядеть.
Я не думаю, что есть гораздо лучше. Да, вы можете применить некоторые эвристики (например, если файл намного больше, чем вам нужно - уменьшите качество более 10%), но все равно будет цикл и несколько сокращений качества (или даже уменьшение размера, если снижение качества не поможет) , – Evk