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);
varresult = 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
23-Sep-2013Use 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: