Home > DeveloperSection > Forums > How to Change Size of Image?
Chintoo Semi

Total Post:135

Points:947
Posted on    September-23-2013 3:40 AM

 WPF WPF 
Ratings:


 1 Reply(s)
 931  View(s)
Rate this:

I am getting an image from the CameraCaptureTask, and I would like to be able to make the image much smaller before saving. The width and height are automatically set to the highest resolution, which is much more than what I need. I have been trying to get the image, change the dimensions, and then attempt to save, although I am getting errors.

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;

            }

            //Set the wb to the original stream?

            wb.SetSource(e.ChosenPhoto); //ERROR saying Use of unassigned local variable 'wb'

            //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;

    }



Sumit Kesarwani

Total Post:378

Points:2694
Posted on    September-23-2013 6:49 AM

Use the overloaded Bitmap constructor to create a re-sized image, the only thing you were missing was a cast back to the Image data type:

public static Image resizeImage(Image imgToResize, Size size)

{

   return (Image)(new Bitmap(imgToResize, size));

}

yourImage = resizeImage(yourImage, new Size(50,50));


Don't want to miss updates? Please click the below button!

Follow MindStick