Skip to content

Commit

Permalink
Merging maxResolution
Browse files Browse the repository at this point in the history
  • Loading branch information
Joe Bowser committed Jul 21, 2011
2 parents 029ddea + 307f9d1 commit 648e56c
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 2 deletions.
8 changes: 7 additions & 1 deletion framework/assets/js/camera.js
Expand Up @@ -78,6 +78,12 @@ Camera.prototype.getPicture = function(successCallback, errorCallback, options)
if (options.quality) {
quality = this.options.quality;
}

var maxResolution = 0;
if (options.maxResolution) {
maxResolution = this.options.maxResolution;
}

var destinationType = Camera.DestinationType.DATA_URL;
if (this.options.destinationType) {
destinationType = this.options.destinationType;
Expand All @@ -86,7 +92,7 @@ Camera.prototype.getPicture = function(successCallback, errorCallback, options)
if (typeof this.options.sourceType === "number") {
sourceType = this.options.sourceType;
}
PhoneGap.exec(successCallback, errorCallback, "Camera", "takePicture", [quality, destinationType, sourceType]);
PhoneGap.exec(successCallback, errorCallback, "Camera", "takePicture", [quality, destinationType, sourceType, maxResolution]);
};

PhoneGap.addConstructor(function() {
Expand Down
2 changes: 1 addition & 1 deletion framework/build.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="PhoneGap" default="help">
<project name="PhoneGap" default="jar">

<!-- LOAD VERSION -->
<loadfile property="version" srcFile="../VERSION">
Expand Down
34 changes: 34 additions & 0 deletions framework/src/com/phonegap/CameraLauncher.java
Expand Up @@ -45,6 +45,7 @@ public class CameraLauncher extends Plugin {
private static final int SAVEDPHOTOALBUM = 2; // Choose image from picture library (same as PHOTOLIBRARY for Android)

private int mQuality; // Compression quality hint (0-100: 0=low quality & high compression, 100=compress of max quality)
private int mMaxResolution; // Maximum resolution of picture taken from camera (width or height, depending on the ratio)
private Uri imageUri; // Uri of captured image
public String callbackId;

Expand All @@ -66,6 +67,7 @@ public PluginResult execute(String action, JSONArray args, String callbackId) {
PluginResult.Status status = PluginResult.Status.OK;
String result = "";
this.callbackId = callbackId;
this.mMaxResolution = 0;

try {
if (action.equals("takePicture")) {
Expand All @@ -77,6 +79,9 @@ public PluginResult execute(String action, JSONArray args, String callbackId) {
if (args.length() > 2) {
srcType = args.getInt(2);
}
if (args.length() > 3) {
this.mMaxResolution = args.getInt(3);
}
if (srcType == CAMERA) {
this.takePicture(args.getInt(0), destType);
}
Expand Down Expand Up @@ -146,6 +151,32 @@ public void getImage(int quality, int srcType, int returnType) {
new String("Get Picture")), (srcType+1)*16 + returnType + 1);
}

/**
* Scales the bitmap according to the requested size.
*
* @param bitmap The bitmap to scale.
* @return Bitmap A new Bitmap object of the same bitmap after scaling.
*/
public Bitmap scaleBitmap(Bitmap bitmap) {
int newWidth = 0;
int newHeight = 0;

if (this.mMaxResolution != 0) {

// Check if a horizontal or vertical picture was taken
if (bitmap.getWidth() > bitmap.getHeight()) {
newWidth = this.mMaxResolution;
newHeight = (int)(((float)bitmap.getHeight() / (float)bitmap.getWidth()) * newWidth);
} else {
newHeight = this.mMaxResolution;
newWidth = (int)(((float)bitmap.getWidth() / (float)bitmap.getHeight()) * newHeight);
}
// Scale the bitmap before returning a compressed image
return Bitmap.createScaledBitmap(bitmap, newWidth, newHeight, true);
}
return bitmap;
}

/**
* Called when the camera view exits.
*
Expand Down Expand Up @@ -175,6 +206,8 @@ public void onActivityResult(int requestCode, int resultCode, Intent intent) {
bitmap = android.graphics.BitmapFactory.decodeStream(resolver.openInputStream(uri));
}

bitmap = scaleBitmap(bitmap);

// If sending base64 image back
if (destType == DATA_URL) {
this.processPicture(bitmap);
Expand Down Expand Up @@ -237,6 +270,7 @@ else if ((srcType == PHOTOLIBRARY) || (srcType == SAVEDPHOTOALBUM)) {
if (destType == DATA_URL) {
try {
Bitmap bitmap = android.graphics.BitmapFactory.decodeStream(resolver.openInputStream(uri));
bitmap = scaleBitmap(bitmap);
this.processPicture(bitmap);
bitmap.recycle();
bitmap = null;
Expand Down

0 comments on commit 648e56c

Please sign in to comment.