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); 
InformationsquelleAutor Matthew | 2013-09-23
Schreibe einen Kommentar