Hello Everyone,
Is there anyway to reduce the resolution of picture taken using
camera? It takes long time to upload the image to server Coz i m converting
the image in bytes and
send to server and may be the size of image may be 3 MB.
Here is my code which i use.
SurfaceHolder.Callback surfaceCallback=new SurfaceHolder.Callback() {
public void surfaceCreated(SurfaceHolder holder)
{
mCamera=Camera.open();
try
{
mCamera.setPreviewDisplay(previewHolder);
mCamera.setOneShotPreviewCallback(null);
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(.5f);
//paint.setColorFilter(new ColorMatrixColorFilter(cm));
}
catch (Throwable t)
{
Log.e("PictureDemo-surfaceCallback","Exception
insetPreviewDisplay()", t);
Toast.makeText(TakePic.this,t.getMessage(),
Toast.LENGTH_LONG).show();
}
}
public void surfaceChanged(SurfaceHolder holder,int format, int
width, int height) {
Camera.Parameters parameters=mCamera.getParameters();
/*int bestWidth = 0;
int bestHeight = 0;
//Customise width/height here - otherwise defaults to screen
width/height
List<Camera.Size> previewSizes =
parameters.getSupportedPreviewSizes();
if (previewSizes.size() > 1)
{
Iterator<Camera.Size> cei = previewSizes.iterator();
while (cei.hasNext())
{
Camera.Size aSize = cei.next();
Log.v("SNAPSHOT","Checking " + aSize.width + " x " +
aSize.height);
if (aSize.width > bestWidth && aSize.width <=
LARGEST_WIDTH
&& aSize.height > bestHeight && aSize.height <=
LARGEST_HEIGHT)
{
// So far it is the biggest without going over the
screen dimensions
bestWidth = aSize.width;
bestHeight = aSize.height;
}
}
}
if (bestHeight != 0 && bestWidth != 0)
{
Log.v("SNAPSHOT", "Using " + bestWidth + " x " +
bestHeight);
parameters.setPreviewSize(bestWidth, bestHeight);
View cameView = null;
//cameraView.setLayoutParams(new LinearLayout.LayoutParams(
bestWidth,bestHeight));
}*/ /*Not in 1.6*/
/*Not in 1.6*/
try
{
parameters.setPreviewSize(100, 100);
parameters.setPictureFormat(PixelFormat.JPEG);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
parameters.setJpegQuality(75);
mCamera.setParameters(parameters);
mCamera.startPreview();
}
catch (Exception e) {
parameters.setPreviewSize(100, 100);
parameters.setPictureSize(20, 20);//parameters.setZoom(1);
/*Not in 1.6*/
//parameters.setZoom(0); /*Not in 1.6*/
parameters.setPictureFormat(PixelFormat.JPEG);
//parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); /*Not in 1.6*/
//parameters.setJpegQuality(100); /*Not in 1.6*/
mCamera.setParameters(parameters);
mCamera.startPreview();
}
//-- Must add the following callback to allow the camera
toautofocus.
mCamera.autoFocus(new Camera.AutoFocusCallback(){
public void onAutoFocus(boolean success, Camera camera)
{
}
} );
}
public void surfaceDestroyed(SurfaceHolder holder) {
if(mCamera != null){
mCamera.stopPreview();
mCamera.release();
mCamera=null;
}
}
};
Camera.PictureCallback photoCallback=new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
ImgName = String.format("%d.jpg", System.currentTimeMillis());
//FileOutputStream outStream = null;
try {
byte[] imgBtye = data;
ColorMatrix cm = new ColorMatrix();
float contrast = 2;
float brightness = -25;
cm.set(new float[] { contrast, 0, 0, 0, brightness,0,
contrast, 0, 0, brightness,0, 0, contrast, 0, brightness, 0, 0, 0,
contrast, 0 });
Paint paint = new Paint();
cm.setSaturation(2f);
paint.setColorFilter(new ColorMatrixColorFilter(cm));
Log.d(TAG, "onPictureTaken - wrote bytes: " +
imgBtye.toString());
GetLocationService();
Intent i = new Intent(TakePic.this, AddDetail.class);
i.putExtra("Pimg", imgBtye);
i.putExtra("lat", lat);
i.putExtra("lag", lag);
startActivity(i);
}
finally
{
}
}
};
*And the other code which i use for convert and upload the image in Bytes
*
if(PImg != null)
{
try
{
PImgString = Base64.encodeToString(PImg, 1);
Log.d("PImgString", PImgString);
}
catch (Exception e) {
PImgString = new String(PImgString);
Log.d("PImgString catch", PImgString);
}
}
--
Thanks and Regards,
Ankit Kasliwal
[email protected]
+91-9300-940-136
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en