mirror of
https://gitee.com/shuto/customCamera.git
synced 2024-10-06 02:12:07 +08:00
Improve the memory used to display the overlay picture.
This commit is contained in:
parent
1498a84f7b
commit
12d78875a5
@ -33,6 +33,7 @@
|
||||
<source-file src="src/android/customCamera/src/org/geneanet/customcamera/ManagerCamera.java" target-dir="src/org/geneanet/customcamera" />
|
||||
<source-file src="src/android/customCamera/src/org/geneanet/customcamera/CameraPreview.java" target-dir="src/org/geneanet/customcamera" />
|
||||
<source-file src="src/android/customCamera/src/org/geneanet/customcamera/VerticalSeekBar.java" target-dir="src/org/geneanet/customcamera" />
|
||||
<source-file src="src/android/customCamera/src/org/geneanet/customcamera/BitmapUtils.java" target-dir="src/org/geneanet/customcamera" />
|
||||
|
||||
<hook type="before_compile" src="hooks/before_compile/generateActivity.js" />
|
||||
</platform>
|
||||
|
@ -0,0 +1,66 @@
|
||||
package org.geneanet.customcamera;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.BitmapFactory.Options;
|
||||
|
||||
public class BitmapUtils {
|
||||
/**
|
||||
* Determine the original size of picture.
|
||||
*
|
||||
* @param bytes[] imgBackgroundBase64
|
||||
*
|
||||
* @return Options Return the options object with sizes set.
|
||||
*/
|
||||
public static Options determineOriginalSizePicture(byte[] imgBackgroundBase64) {
|
||||
Options options = new Options();
|
||||
options.inJustDecodeBounds = true;
|
||||
BitmapFactory.decodeByteArray(imgBackgroundBase64, 0, imgBackgroundBase64.length, options);
|
||||
|
||||
return options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine the best value of inSampleSize in the option object to adapt the picture at the screen size.
|
||||
*
|
||||
* @param Options options Option object to set inSampleSize.
|
||||
* @param int destWidth Width destination.
|
||||
* @param int destHeight Height destination.
|
||||
*/
|
||||
public static void determineInSampleSize(Options options, int destWidth, int destHeight) {
|
||||
// Raw height and width of image
|
||||
final int height = options.outHeight;
|
||||
final int width = options.outWidth;
|
||||
int inSampleSize = 1;
|
||||
|
||||
if (height > destHeight || width > destWidth) {
|
||||
|
||||
final int halfHeight = height / 2;
|
||||
final int halfWidth = width / 2;
|
||||
|
||||
// Calculate the largest inSampleSize value that is a power of 2 and keeps both
|
||||
// height and width larger than the requested height and width.
|
||||
// More informations: http://developer.android.com/training/displaying-bitmaps/load-bitmap.html#load-bitmap
|
||||
while ((halfHeight / inSampleSize) > destHeight
|
||||
&& (halfWidth / inSampleSize) > destWidth) {
|
||||
inSampleSize *= 2;
|
||||
}
|
||||
}
|
||||
|
||||
options.inSampleSize = inSampleSize;
|
||||
}
|
||||
|
||||
/**
|
||||
* Decode a byte array to generate a base64 adapted at the destination's size.
|
||||
*
|
||||
* @param bytes[] imgBackgroundBase64
|
||||
* @param Options options
|
||||
*
|
||||
* @return Bitmap
|
||||
*/
|
||||
public static Bitmap decodeOptimalPictureFromByteArray(byte[] imgBackgroundBase64, Options options) {
|
||||
options.inJustDecodeBounds = false;
|
||||
|
||||
return BitmapFactory.decodeByteArray(imgBackgroundBase64, 0, imgBackgroundBase64.length, options);
|
||||
}
|
||||
}
|
@ -9,6 +9,7 @@ import android.content.res.Resources.NotFoundException;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Bitmap.CompressFormat;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.BitmapFactory.Options;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Matrix;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
@ -46,6 +47,7 @@ import android.widget.TextView;
|
||||
import org.geneanet.customcamera.CameraPreview;
|
||||
import org.geneanet.customcamera.ManagerCamera;
|
||||
import org.geneanet.customcamera.TransferBigData;
|
||||
import org.geneanet.customcamera.BitmapUtils;
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
@ -469,34 +471,32 @@ public class CameraActivity extends Activity {
|
||||
imgBackgroundBase64 = TransferBigData.getImgBackgroundBase64OtherOrientation();
|
||||
}
|
||||
if (imgBackgroundBase64 != null) {
|
||||
// Get picture.
|
||||
Bitmap imgBackgroundBitmap = BitmapFactory.decodeByteArray(
|
||||
imgBackgroundBase64, 0, imgBackgroundBase64.length);
|
||||
|
||||
// Get sizes screen.
|
||||
Display defaultDisplay = getWindowManager().getDefaultDisplay();
|
||||
DisplayMetrics displayMetrics = new DisplayMetrics();
|
||||
defaultDisplay.getMetrics(displayMetrics);
|
||||
int displayWidthPx = (int) displayMetrics.widthPixels;
|
||||
int displayHeightPx = (int) displayMetrics.heightPixels;
|
||||
|
||||
// Get sizes picture.
|
||||
int widthBackground = (int) (imgBackgroundBitmap.getWidth() * displayMetrics.density);
|
||||
int heightBackground = (int) (imgBackgroundBitmap.getHeight() * displayMetrics.density);
|
||||
|
||||
// Change size ImageView.
|
||||
RelativeLayout.LayoutParams paramsMiniature = new RelativeLayout.LayoutParams(
|
||||
widthBackground, heightBackground);
|
||||
|
||||
// Get picture.
|
||||
Options options = BitmapUtils.determineOriginalSizePicture(imgBackgroundBase64);
|
||||
int widthResize = 0;
|
||||
int heightResize = 0;
|
||||
int widthBackground = options.outWidth;
|
||||
int heightBackground= options.outHeight;
|
||||
float ratioX = (float) displayWidthPx / (float) widthBackground;
|
||||
float ratioY = (float) displayHeightPx / (float) heightBackground;
|
||||
if (ratioX < ratioY && ratioX < 1) {
|
||||
paramsMiniature.width = (int) displayWidthPx;
|
||||
paramsMiniature.height = (int) (ratioX * heightBackground);
|
||||
widthResize = (int) displayWidthPx;
|
||||
heightResize = (int) (ratioX * heightBackground);
|
||||
} else if (ratioX >= ratioY && ratioY < 1) {
|
||||
paramsMiniature.width = (int) (ratioY * widthBackground);
|
||||
paramsMiniature.height = (int) displayHeightPx;
|
||||
widthResize = (int) (ratioY * widthBackground);
|
||||
heightResize = (int) displayHeightPx;
|
||||
}
|
||||
|
||||
BitmapUtils.determineInSampleSize(options, displayWidthPx, displayHeightPx);
|
||||
Bitmap imgBackgroundBitmap = BitmapUtils.decodeOptimalPictureFromByteArray(imgBackgroundBase64, options);
|
||||
|
||||
// set image at the view.
|
||||
ImageView background = (ImageView) findViewById(R.id.background);
|
||||
background.setImageBitmap(imgBackgroundBitmap);
|
||||
@ -507,6 +507,7 @@ public class CameraActivity extends Activity {
|
||||
background.setAlpha((float)1);
|
||||
}
|
||||
|
||||
RelativeLayout.LayoutParams paramsMiniature = new RelativeLayout.LayoutParams(widthResize, heightResize);
|
||||
paramsMiniature.addRule(RelativeLayout.CENTER_IN_PARENT,
|
||||
RelativeLayout.TRUE);
|
||||
|
||||
@ -734,12 +735,6 @@ public class CameraActivity extends Activity {
|
||||
|
||||
// Temporarily storage to use for decoding
|
||||
opt.inTempStorage = new byte[16 * 1024];
|
||||
Camera.Parameters paramsCamera = customCamera.getParameters();
|
||||
Size size = paramsCamera.getPictureSize();
|
||||
|
||||
int height = size.height;
|
||||
int width = size.width;
|
||||
float res = (width * height) / 1024000;
|
||||
|
||||
// Preview from camera
|
||||
photoTaken = BitmapFactory.decodeByteArray(data, 0, data.length, opt);
|
||||
|
Loading…
Reference in New Issue
Block a user