【发布时间】:2016-12-27 11:39:29
【问题描述】:
我已经在 Stack 上阅读了很多关于调整图像大小和降低质量的帖子,但没有一篇是关于降低某些物理磁盘空间的质量
我有一个可以拍照的代码:
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 MB。
所以我这样做:
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% 以上),但仍然会有一个循环和多次质量降低(如果降低质量无济于事,甚至会降低尺寸) .
标签: c# uwp bitmapimage storagefile