Ich habe schon viele Beiträge auf Stapel über Ändern der Bildgröße und Qualität zu reduzieren, aber nicht von ihnen hat Qualität auf bestimmte physikalische SpeicherplatzC# StorageFile Bild auf bestimmte Menge an Bytes die Größe
ich über die Verringerung haben Code, der ein Bild aufnimmt:
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)
{
}
}
Jetzt muss ich die Daten an den Server senden, aber vor, muss ich sicherstellen, dass das Foto nicht mehr als 3 MB ist.
So mache ich das:
BasicProperties pro = await photo.GetBasicPropertiesAsync();
if (pro.Size < 3072)
{
// SEND THE FILE TO SERVER
}
else
{
// DECREASE QUALITY BEFORE SENDING
}
So ist die Frage ELSE wird über Block
gibt es eine bessere oder vielleicht habe ich einige integrierte in Ansatz verfehlt Bild in den bestimmten Betrag passen von Megabyte durch die Verringerung der Qualität?
Da dies zu tun:
while (pro.Size <= 3072)
{
photo = // some logic to decrease quality on 10%
}
nicht wirklich gut aussehen.
Ich glaube nicht, dass es eine ist viel besser. Ja, Sie können einige Heuristiken anwenden (zB wenn die Datei viel größer ist als Sie brauchen - die Qualität um mehr als 10% reduzieren), aber es wird immer eine Schleife und mehrere Qualitätsreduktionen geben (oder sogar Größenreduktion, wenn die Qualität nicht hilft) . – Evk