You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cordova.apache.org by "Volker Schuchardt (Issue Comment Edited) (JIRA)" <ji...@apache.org> on 2012/03/15 10:25:37 UTC
[jira] [Issue Comment Edited] (CB-183) ios camera
targetWidth/Height don't match the documentation
[ https://issues.apache.org/jira/browse/CB-183?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13226086#comment-13226086 ]
Volker Schuchardt edited comment on CB-183 at 3/15/12 9:23 AM:
---------------------------------------------------------------
Hi Shazron Abdullah,
I found the same issue in version 1.4. Therefore I changed the code to match the aspect ratio as follows in file 'Camera.m':
(UIImage*)imageByScalingAndCroppingForSize:(UIImage*)anImage toSize:(CGSize)targetSize
{
...
CGPoint thumbnailPoint = CGPointMake(0.0,0.0);
if (CGSizeEqualToSize(imageSize, targetSize) == NO)
{
CGFloat widthFactor = targetWidth / width;
CGFloat heightFactor = targetHeight / height;
if (widthFactor > heightFactor)
//here the value was widthFactor but has to be heightFactor. So I changed it.
scaleFactor = heightFactor; // scale to fit height
else
//Here the value was heightFactor but has to be widthFactor. So I changed it.
scaleFactor = widthFactor; // scale to fit width
scaledWidth = width * scaleFactor;
scaledHeight = height * scaleFactor;
// center the image
if (widthFactor > heightFactor)
{
thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;
}
else
if (widthFactor < heightFactor)
{
thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
}
}
//This line was added to replace the one below. There we won't crop the picture, but just resize it to the new calculated values.
UIGraphicsBeginImageContext(CGSizeMake(scaledWidth, scaledHeight));
// UIGraphicsBeginImageContext(targetSize); // this will crop
...
}
Hope it helps.
Best regards,
Volker
was (Author: forestvogo):
Hi Shazron Abdullah,
I found the same issue in version 1.4. Therefore I changed the code to match the aspect ratio as follows in file 'Camera.m':
(UIImage*)imageByScalingAndCroppingForSize:(UIImage*)anImage toSize:(CGSize)targetSize
{
...
//Added the following line to save the resized messures at a later point.
CGSize scaledSize = CGSizeMake(0, 0);
CGPoint thumbnailPoint = CGPointMake(0.0,0.0);
if (CGSizeEqualToSize(imageSize, targetSize) == NO)
{
CGFloat widthFactor = targetWidth / width;
CGFloat heightFactor = targetHeight / height;
if (widthFactor > heightFactor)
//here the value was widthFactor but has to be heightFactor. So I changed it.
scaleFactor = heightFactor; // scale to fit height
else
//Here the value was heightFactor but has to be widthFactor. So I changed it.
scaleFactor = widthFactor; // scale to fit width
scaledWidth = width * scaleFactor;
scaledHeight = height * scaleFactor;
//This line was added to save the new width and height values.
scaledSize = CGSizeMake(scaledWidth, scaledHeight);
// center the image
if (widthFactor > heightFactor)
{
thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;
}
else
if (widthFactor < heightFactor)
{
thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
}
}
//This line was added to replace the one below. There we won't crop the picture, but just resize it to the new calculated values.
UIGraphicsBeginImageContext(scaledSize);
// UIGraphicsBeginImageContext(targetSize); // this will crop
...
}
Hope it helps.
Best regards,
Volker
> ios camera targetWidth/Height don't match the documentation
> -----------------------------------------------------------
>
> Key: CB-183
> URL: https://issues.apache.org/jira/browse/CB-183
> Project: Apache Callback
> Issue Type: Bug
> Components: iOS
> Affects Versions: 1.0.0
> Reporter: Durham
> Assignee: Shazron Abdullah
> Fix For: 1.6.0
>
>
> According to the [phonegap camera documentation|http://docs.phonegap.com/en/1.3.0/phonegap_camera_camera.md.html#cameraOptions] using targetWidth and targetHeight should maintain the aspect ratio of the original photo . The ios implementation does not do this. Instead it makes the shortest side match the desired target, and crops the rest.
> For example, if I take a 1920x1200 picture, and say targetWidth=1024 and targetHeight=1024, it results in a 1024x1024 square picture with the excess removed. On android it results in something like 1024x640, and nothing is cropped.
> I'm don't know objective-c, but I believe the fix is to use the following code inside Camera.m imageByScalingAndCroppingForSize. This is based off the android implementation.
> {code:title=Camera.m}
> ...
> if (CGSizeEqualToSize(imageSize, targetSize) == NO)
> {
> CGFloat newRatio = targetWidth / targetHeight;
> CGFloat origRatio = width / height;
> if (origRatio > newRatio)
> {
> targetHeight = (targetWidth * height) / width
> }
> else
> {
> targetWidth = (targetHeight * width) / height;
> }
> }
> CGSize finalSize = CGSizeMake(targetWidth, targetHeight);
> UIGraphicsBeginImageContext(finalSize);
> CGRect thumbnailRect = CGRectZero;
> thumbnailRect.size.width = targetWidth;
> thumbnailRect.size.height = targetHeight;
> [sourceImage drawInRect:thumbnailRect];
> ...
> {code}
> I'm currently seeing the problem in 1.0, but from looking at the code it still looks like a problem in 1.3.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira