So Ändern Sie die Größe des Bildes
Bin ich immer ein Bild aus der CameraCaptureTask, und ich möchte in der Lage sein, um das Bild viel kleiner ist, bevor Sie Sie speichern. Die Breite und Höhe werden automatisch auf die höchste Auflösung, und das ist viel mehr als das, was ich brauche. Ich habe versucht, das Bild, ändern Sie die Abmessungen, und dann versuchen zu speichern, obwohl ich immer Fehler.
ORIGINAL
MainPage.xaml.cs
private void cameraTask_Completed(object sender, PhotoResult e)
{
if (e.TaskResult == TaskResult.OK)
{
BitmapImage bmi = new BitmapImage();
bmi.SetSource(e.ChosenPhoto);
//MessageBox.Show(bmi.PixelWidth.ToString() + "x" + bmi.PixelHeight.ToString());
var gcd = GCD(bmi.PixelWidth, bmi.PixelHeight);
var result = string.Format("{0}:{1}", bmi.PixelWidth / gcd, bmi.PixelHeight / gcd);
WriteableBitmap wb;
Stream stream;
switch (result)
{
case "3:4":
wb = new WriteableBitmap(480,640);
break;
case "4:3":
wb = new WriteableBitmap(640,480);
break;
case "9:16":
wb = new WriteableBitmap(448, 800);
break;
case "16:9":
wb = new WriteableBitmap(800, 448);
break;
default:
wb = null;
return;
}
//Set the wb to the original stream?
wb.SetSource(e.ChosenPhoto);
//Convert the wb to a stream for saving
stream = new MemoryStream(wb.ToByteArray());
//Need to replace the following line with the new image stream for saving?
//var capturedPicture = new CapturedPicture(e.OriginalFileName, e.ChosenPhoto);
var capturedPicture = new CapturedPicture(e.OriginalFileName, stream);
}
}
public int GCD(int a, int b)
{
while (a != 0 && b != 0)
{
if (a > b)
a %= b;
else
b %= a;
}
if (a == 0)
return b;
else
return a;
}
EDIT: neue Umsetzung
private void cameraTask_Completed(object sender, PhotoResult e)
{
if (e.TaskResult == TaskResult.OK)
{
BitmapImage bmi = new BitmapImage();
bmi.SetSource(e.ChosenPhoto);
var gcd = GCD(bmi.PixelWidth, bmi.PixelHeight);
var result = string.Format("{0}:{1}", bmi.PixelWidth / gcd, bmi.PixelHeight / gcd);
WriteableBitmap wb = new WriteableBitmap(bmi);
Stream stream = new MemoryStream();
switch (result)
{
case "3:4":
wb.SaveJpeg(stream, 480, 640, 0, 100);
break;
case "4:3":
wb.SaveJpeg(stream, 640, 480, 0, 100);
break;
case "9:16":
wb.SaveJpeg(stream, 448, 800, 0, 100);
break;
case "16:9":
wb.SaveJpeg(stream, 800, 448, 0, 100);
break;
default:
wb = null;
return;
}
stream.Seek(0, SeekOrigin.Begin);
//var capturedPicture = new CapturedPicture(e.OriginalFileName, e.ChosenPhoto);
var capturedPicture = new CapturedPicture(e.OriginalFileName, stream);
Du musst angemeldet sein, um einen Kommentar abzugeben.
verwenden Sie den überladenen Konstruktor Bitmap zu erstellen, die Größe neu Bild, das einzige, was Sie fehlte, war ein cast zurück an den Bild-Daten Typ:
var capturedPicture = new CapturedPicture(e.OriginalFileName, i);
woi
als stream??? Zu beachtenCapturedPicture
ist eine Klasse, die erfordert den Namen des Bildes und die daraus resultierenden Strom speichern, um das Bild zuIsolatedStorage
.Bitmap
nicht vorhanden ist, das ist, warum ichBitmapImage
undWriteableBitmap
.WriteableBitmap
mit der neuen Größe der original Bach-Ergebnise.ChosenPhoto
, aber eine neue Fehlermeldung besagt, dassUse of unassigned local variable 'wb'
Auftritt?result
ist nicht entweder von diesen Fällen, so übergibt er den Schalter und springt aufSetSource
Linie, wowb
können nicht verwendet werden. Debug, um den Wertresult
variable.