android - how to capture picture portrait mode set portrait mode? -
i have camera activity. , capture picture in camera preview not show picture portrait mode . how possible in android . code below .
public class cameraactivity extends activity { private camera mcamera; private camerapreview mcamerapreview; protected static final int media_type_image = 0; static string filepath = ""; button takepicture; static string base64string=""; @override protected void oncreate(bundle savedinstancestate) { // todo auto-generated method stub super.oncreate(savedinstancestate); setcontentview(r.layout.camera_preview); mcamera = getcamerainstance(); mcamerapreview = new camerapreview(cameraactivity.this, mcamera); framelayout preview = (framelayout) findviewbyid(r.id.camera_preview); preview.addview(mcamerapreview); takepicture = (button) findviewbyid(r.id.btntakepicture); takepicture.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { // todo auto-generated method stub mcamera.takepicture(null, null, mpicture); } }); } private camera getcamerainstance() { camera camera = null; try { camera = camera.open(); } catch (exception e) { // cannot camera or not exist } return camera; } private static file getoutputmediafile() { file mediastoragedir = new file( environment .getexternalstoragepublicdirectory(environment.directory_pictures), "mycameraapp"); if (!mediastoragedir.exists()) { if (!mediastoragedir.mkdirs()) { log.d("mycameraapp", "failed create directory"); return null; } } // create media file name string timestamp = new simpledateformat("yyyymmdd_hhmmss") .format(new date()); filepath = mediastoragedir.getpath() + file.separator + "img_" + timestamp + ".jpg"; log.v("log", " filepath " + filepath); file mediafile; mediafile = new file(mediastoragedir.getpath() + file.separator + "img_" + timestamp + ".jpg"); return mediafile; } picturecallback mpicture = new picturecallback() { @override public void onpicturetaken(byte[] data, camera camera) { file picturefile = getoutputmediafile(); if (picturefile == null) { return; } try { fileoutputstream fos = new fileoutputstream(picturefile); fos.write(data); fos.close(); intent returnintent = new intent(); returnintent.putextra("data", data); setresult(result_ok, returnintent); finish(); } catch (filenotfoundexception e) { } catch (ioexception e) { } } }; public void onbackpressed() { intent returnintent = new intent(); returnintent.putextra("path", filepath); setresult(result_ok, returnintent); finish(); }; }
and data :
@override public void onactivityresult(int requestcode, int resultcode, intent data) { super.onactivityresult(requestcode, resultcode, data); log.v("log", " data --> " + data.getbytearrayextra("data")); if (requestcode == 1) { if (data.hasextra("data")) { log.v("log", " request if "); bitmap b = bitmapfactory.decodebytearray( data.getbytearrayextra("data"), 0, data.getbytearrayextra("data").length); imgstorepicture.setimagebitmap(b); /*imgstorepicture.setscaletype(scaletype.fit_xy);*/ base64string = base64.encodebytes(data .getbytearrayextra("data")); log.v("log", "base64string " + base64string); } } }
the short answer is, cannot. picture returned way is. can change preview orientation, not orientation of jpeg image returned onpicturetaken)
.
but can set jpeg rotation via exif header without decoding it. efficient method, viewers may still show rotated image.
alternatively, can use jpeg lossless rotation. android port on github.
Comments
Post a Comment