Richard Marshall created CB-4027:
------------------------------------
Summary: Using targetWidth & targetHeight with camera.getPicture
does not return scaled image on WP7 WP8 PhoneGap
Key: CB-4027
URL: https://issues.apache.org/jira/browse/CB-4027
Project: Apache Cordova
Issue Type: Bug
Components: Plugin Camera, WP7, WP8
Affects Versions: 2.8.0
Reporter: Richard Marshall
Assignee: Steve Gill
I have built an app that uses the camera.getPicture.
I am using targetWidth & targetHeight to shrink the image to a smaller size
before saving it to a server.
The PhoneGap functionality is supposed to scale the image so as not to lose the
aspect ratio of the original image.
As mentioned in
http://docs.phonegap.com/en/2.8.0/cordova_camera_camera.md.html#Camera
The functionality is working fine in iOS and Android, but in Windows Phone it
turns it into a square with the width and height as set by targetWidth &
targetHeight.
This is the call;
navigator.camera.getPicture(app.onPhotoDataSuccess, app.onPhotoDataFail, {
quality: 50, targetWidth:400, targetHeight:400, allowEdit: false,
destinationType: app.destinationType.DATA_URL });
Looking at the PhoneGap 2.8 code in Plugins/Camera.cs
private string GetImageContent(Stream stream)
{
int streamLength = (int)stream.Length;
byte[] fileData = new byte[streamLength + 1];
stream.Read(fileData, 0, streamLength);
//use photo's actual width & height if user doesn't provide width &
height
if (cameraOptions.TargetWidth < 0 && cameraOptions.TargetHeight < 0)
{
stream.Close();
return Convert.ToBase64String(fileData);
}
else
{
// resize photo
byte[] resizedFile = ResizePhoto(stream, fileData);
stream.Close();
return Convert.ToBase64String(resizedFile);
}
}
private byte[] ResizePhoto(Stream stream, byte[] fileData)
{
int streamLength = (int)stream.Length;
int intResult = 0;
byte[] resizedFile;
stream.Read(fileData, 0, streamLength);
BitmapImage objBitmap = new BitmapImage();
MemoryStream objBitmapStream = new MemoryStream(fileData);
MemoryStream objBitmapStreamResized = new MemoryStream();
WriteableBitmap objWB;
objBitmap.SetSource(stream);
objWB = new WriteableBitmap(objBitmap);
// resize the photo with user defined TargetWidth & TargetHeight
Extensions.SaveJpeg(objWB, objBitmapStreamResized,
cameraOptions.TargetWidth, cameraOptions.TargetHeight, 0,
cameraOptions.Quality);
//Convert the resized stream to a byte array.
streamLength = (int)objBitmapStreamResized.Length;
resizedFile = new Byte[streamLength]; //-1
objBitmapStreamResized.Position = 0;
//for some reason we have to set Position to zero, but we don't
have to earlier when we get the bytes from the chosen photo...
intResult = objBitmapStreamResized.Read(resizedFile, 0,
streamLength);
return resizedFile;
}
You can see the if code that calls to resize the image.
When you look at the definition for Extensions.SaveJpeg
public static void LoadJpeg(this WriteableBitmap bitmap, Stream sourceStream);
//
// Summary:
// Encodes a WriteableBitmap object into a JPEG stream, with
parameters for
// setting the target width and height of the JPEG file.
//
// Parameters:
// bitmap:
// The WriteableBitmap object.
//
// targetStream:
// The image data stream.
//
// targetWidth:
// The target width of the file.
//
// targetHeight:
// The target height of the file.
//
// orientation:
// This parameter is not currently used by this method. Use a value
of 0 as
// a placeholder.
//
// quality:
// This parameter represents the quality of the JPEG photo with a
range between
// 0 and 100, with 100 being the best photo quality. We recommend
that you do
// not fall lower than a value of 70. because JPEG picture quality
diminishes
// significantly below that level.
[SecuritySafeCritical]
public static void SaveJpeg(this WriteableBitmap bitmap, Stream
targetStream, int targetWidth, int targetHeight, int orientation, int quality);
}
You can not see any reference to the fact that the aspect ratio will be kept
anywhere in the code.
So it looks as if the aspect ratio is not honoured in the Windows Phone
implementation of the functionality.
Can we please have this fixed?
I originally posted here:
https://groups.google.com/forum/#!topic/phonegap/XNOhAqQDn4U
Thanks
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira