You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cordova.apache.org by "ASF subversion and git services (JIRA)" <ji...@apache.org> on 2014/04/08 20:53:15 UTC
[jira] [Commented] (CB-4027) Using targetWidth & targetHeight with
camera.getPicture does not return scaled image on WP7 WP8 PhoneGap
[ https://issues.apache.org/jira/browse/CB-4027?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13963298#comment-13963298 ]
ASF subversion and git services commented on CB-4027:
-----------------------------------------------------
Commit e7a3d70fe969f75b795ca216dd9173f8df1635ee in cordova-plugin-camera's branch refs/heads/dev from [~purplecabbage]
[ https://git-wip-us.apache.org/repos/asf?p=cordova-plugin-camera.git;h=e7a3d70 ]
Fix camera issues, cropping, memory leaks CB-4027, CB-5102, CB-2737, CB-2387
> 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: Jesse MacFadyen
>
> 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 was sent by Atlassian JIRA
(v6.2#6252)