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)