的我已经读了很多关于调整图像大小和质量的减少对堆栈的职位,但其中的非已约降低质量以一定的物理磁盘空间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 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%以上),但仍然会出现循环和多个质量降低(如果降低质量无助于缩小尺寸) 。 – Evk