Android Custom Camera -
i looking create custom camera in android. have gotten alot of here problem image preview orientation seems distorted. when phone in portrait mode, image been drawn in landscape ? not normal , feel here code library. please me
package com.whatsthegoss.simplecamera; import java.io.file; import java.io.filenotfoundexception; import java.io.fileoutputstream; import java.io.ioexception; import java.util.list; import android.app.activity; import android.content.intent; import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.graphics.pixelformat; import android.hardware.camera; import android.hardware.camera.autofocuscallback; import android.net.uri; import android.os.bundle; import android.os.environment; import android.view.menu; import android.view.surfaceholder; import android.view.surfaceview; import android.view.view; import android.view.view.onclicklistener; import android.view.window; import android.view.windowmanager; import android.widget.button; public class mainactivity extends activity implements surfaceholder.callback, onclicklistener{ private static final string external_storage_dir = environment.getexternalstoragedirectory().tostring() + "/simplecamera"; private camera mcamera; private boolean mpreviewrunning; private surfaceview msurfaceview; private surfaceholder msurfaceholder; private button mbuttoncapture; private camera.picturecallback mpicturecallback = new camera.picturecallback() { public void onpicturetaken(byte[] imagedata, camera c) { final bitmap bm = bitmapfactory.decodebytearray(imagedata, 0, imagedata.length); final bitmap a=bitmap.createbitmap(bm, 10,10,30, 60); final file file = new file(external_storage_dir, "ic_" + system.currenttimemillis() + ".jpg"); try { final fileoutputstream outstream = new fileoutputstream(file); a.compress(bitmap.compressformat.jpeg, 100, outstream); if (outstream != null) { outstream.flush(); outstream.close(); } // update media gallery updatemediagallery(); } catch (filenotfoundexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); } // restart camera preview mcamera.startpreview(); } }; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); getwindow().setformat(pixelformat.translucent); requestwindowfeature(window.feature_no_title); getwindow().setflags(windowmanager.layoutparams.flag_fullscreen, windowmanager.layoutparams.flag_fullscreen); setcontentview(r.layout.activity_main); msurfaceview = (surfaceview) findviewbyid(r.id.surface_camera); msurfaceholder = msurfaceview.getholder(); msurfaceholder.addcallback(this); msurfaceholder.settype(surfaceholder.surface_type_push_buffers); mbuttoncapture = (button) findviewbyid(r.id.button_capture); mbuttoncapture.setonclicklistener(this); // create necessary directories file storagepath = new file(external_storage_dir); storagepath.mkdirs(); } @override public boolean oncreateoptionsmenu(menu menu) { getmenuinflater().inflate(r.menu.activity_main, menu); return true; } @override public void surfacechanged(surfaceholder holder, int format, int width, int height) { if (mpreviewrunning) { mcamera.stoppreview(); } final camera.parameters params = mcamera.getparameters(); final list<camera.size> sizes = params.getsupportedpreviewsizes(); final camera.size size = sizes.get(sizes.size()-2); final list<camera.size> picturesizes = params.getsupportedpicturesizes(); final camera.size picturesize = picturesizes.get(picturesizes.size()-2); params.setpreviewsize(size.width, size.height); params.setpicturesize(picturesize.width, picturesize.height); mcamera.setparameters(params); try { mcamera.setpreviewdisplay(holder); } catch (ioexception e) { e.printstacktrace(); } mcamera.startpreview(); mpreviewrunning = true; } @override public void surfacecreated(surfaceholder holder) { mcamera = camera.open(); } @override public void surfacedestroyed(surfaceholder holder) { mcamera.stoppreview(); mpreviewrunning = false; mcamera.release(); } @override public void onclick(view v) { switch (v.getid()) { case r.id.button_capture: mcamera.autofocus(new autofocuscallback() { @override public void onautofocus(boolean success, camera camera) { mcamera.takepicture(null, null, mpicturecallback); } }); break; } } /** * method used notify media gallery there new image * */ private void updatemediagallery() { sendbroadcast(new intent(intent.action_media_mounted, uri.parse("file://"+ external_storage_dir))); } }
adapted code developer.android.com:
private void setcameradisplayorientation() { camerainfo info = new camerainfo(); camera.getcamerainfo(0, info); int rotation = getwindowmanager().getdefaultdisplay().getrotation(); int degrees = 0; switch (rotation) { case surface.rotation_0: degrees = 0; break; case surface.rotation_90: degrees = 90; break; case surface.rotation_180: degrees = 180; break; case surface.rotation_270: degrees = 270; break; } int result; if (info.facing == camera.camerainfo.camera_facing_front) { result = (info.orientation + degrees) % 360; result = (360 - result) % 360; // compensate mirror } else { // back-facing result = (info.orientation - degrees + 360) % 360; } mcamera.setdisplayorientation(result); }
Comments
Post a Comment