java - camera app rotates images by 90 degrees -


my custom camera app developing rotates images 90 degrees time, onscreen view of camera distorted , in 90 degrees anti-clockwise, when saves image, if have taken photo phone 90 degrees left when im holding portrait, takes landscape photos. here code camera activity, can rotate onscreen view of camera?

package fr.altimer.lost.collect.client;  import java.io.file; import java.io.fileoutputstream; import java.io.ioexception; import java.text.simpledateformat; import java.util.date; import java.util.list;  import android.app.activity; import android.content.componentname; import android.content.context; import android.content.intent; import android.content.serviceconnection; import android.graphics.pixelformat; import android.hardware.camera; import android.hardware.camera.size; import android.location.location; import android.os.bundle; import android.os.environment; import android.os.ibinder; import android.view.keyevent; 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.imagebutton; import android.widget.toast; import fr.altimer.lost.collect.client.model.data; import fr.altimer.lost.collect.client.model.image; import fr.altimer.lost.collect.client.preferences.configuration; import fr.altimer.lost.collect.client.services.searchservice; import fr.altimer.lost.collect.client.services.servicesensor;  public class cameraactivity extends activity implements surfaceholder.callback, camera.picturecallback {  private camera camera; private surfaceview surfacecamera; private boolean ispreview; private servicesensor mservice; private boolean mbound;  private int routegiven = 0;  @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     // on met l'application en plein écran et sans barre de titre     getwindow().setformat(pixelformat.translucent);     requestwindowfeature(window.feature_no_title);     getwindow().setflags(windowmanager.layoutparams.flag_fullscreen, windowmanager.layoutparams.flag_fullscreen);      ispreview = false;      // on applique notre layout     setcontentview(r.layout.camera);      // on récupère notre surface pour le preview     surfacecamera = (surfaceview) findviewbyid(r.id.surfaceviewcamera);      // bouton pour prendre la photo     imagebutton picture = (imagebutton) findviewbyid(r.id.photo);     picture.setonclicklistener(new onclicklistener() {          @override         public void onclick(view v) {             takepicture();         }     });      // bouton retour     imagebutton = (imagebutton) findviewbyid(r.id.tablelayout02);     back.setonclicklistener(new onclicklistener() {          @override         public void onclick(view v) {             finish();         }     });      // méthode d'initialisation de la caméra     initializecamera();      if (savedinstancestate != null) {         routegiven = savedinstancestate.getint("routegiven", 0);     } }  public void initializecamera() {     // on attache nos retour du holder à  notre activite     surfacecamera.getholder().addcallback(this);     surfacecamera.getholder().settype(surfaceholder.surface_type_push_buffers); }  @override public void surfacechanged(surfaceholder holder, int format, int width, int height) {     // si le mode preview est lancé alors on le stop     if (ispreview) {         camera.stoppreview();     }     // on récupère les parametres de la camera     camera.parameters parameters = camera.getparameters();      list<size> sizes = parameters.getsupportedpreviewsizes();     size previewsize = getoptimalpreviewsize(sizes, width, height);     // on change la taille     parameters.setpreviewsize(previewsize.width, previewsize.height);      // on applique nos nouveaux parametres     camera.setparameters(parameters);      try {         // on attache notre previsualisation de la camera au holder de la         // surface         camera.setpreviewdisplay(surfacecamera.getholder());     } catch (ioexception e) {     }      // on lance la previeuw     camera.startpreview();      ispreview = true; }  @override public void surfacecreated(surfaceholder holder) {     // on prend le controle de la camera     if (camera == null)         camera = camera.open(); }  @override public void surfacedestroyed(surfaceholder holder) {     // on arrête la camera et on rend la main     if (camera != null) {         camera.stoppreview();         ispreview = false;         camera.release();     } }  @override public void onpicturetaken(byte[] data, camera camera) {     int routeid = 0;      // récupération de l'id du parcours     if (mbound && mservice != null) {         routeid = mservice.getidcurrent();     } else {         routeid = routegiven;     }      // création et sauvegarde la photo     string picturename = getfilename(routeid);      if (picturename != null) {         file picturefile = new file(picturename);         fileoutputstream fos = null;         try {             fos = new fileoutputstream(picturefile);             fos.write(data);             fos.flush();             toast.maketext(getbasecontext(), "new image saved", toast.length_long).show();          } catch (ioexception e) {             e.printstacktrace();         } {             try {                 fos.close();             } catch (ioexception e) {                 e.printstacktrace();             }         }          // enregistrement du path de l'image dans la bdd         if (mbound && mservice != null) {             location loc = mservice.getlastlocation();             data image;             if (loc == null)                 image = new image(picturename, null, null);             else                 image = new image(picturename, loc.getlatitude(), loc.getlongitude());             mservice.savedata(image);         } else {             intent intent = new intent();             intent.putextra("path", picturename);             setresult(result_ok, intent);         }     } else {         toast.maketext(this, "can't create directory save image.", toast.length_long).show();     }     finish(); }  /**  * récupération du chemin de la carte sd  * @return  */ private file getdir() {     string status = environment.getexternalstoragestate();     try {         if (status.equals(environment.media_mounted)) {             return environment.getexternalstoragedirectory();         }     } catch (illegalargumentexception e) {         status = environment.media_removed;     }     return null; }  /**  * création et récupération du nom du fichier jpg  * @param routeid  * @return  */ private string getfilename(int routeid) {     simpledateformat dateformat1 = new simpledateformat("ddmmyy-hhmmss");     string datestring = dateformat1.format(new date());     file filedir = getdir();     if (filedir != null) {         file filepath = new file(filedir.getabsolutepath() + configuration.lost_folder);         if (!filepath.exists())             filepath.mkdir();         return filepath.getpath() + file.separator + "picture_" + datestring + "_id_" + routeid + ".jpg";     } else {         return null;     } }  private size getoptimalpreviewsize(list<size> sizes, int w, int h) {     final double aspect_tolerance = 0.1;     double targetratio = (double) w / h;     if (sizes == null)         return null;      size optimalsize = null;     double mindiff = double.max_value;      int targetheight = h;      // try find size match aspect ratio , size     (size size : sizes) {         double ratio = (double) size.width / size.height;         if (math.abs(ratio - targetratio) > aspect_tolerance)             continue;         if (math.abs(size.height - targetheight) < mindiff) {             optimalsize = size;             mindiff = math.abs(size.height - targetheight);         }     }      // cannot find 1 match aspect ratio, ignore requirement     if (optimalsize == null) {         mindiff = double.max_value;         (size size : sizes) {             if (math.abs(size.height - targetheight) < mindiff) {                 optimalsize = size;                 mindiff = math.abs(size.height - targetheight);             }         }     }     return optimalsize; }  @override public boolean onkeydown(int keycode, keyevent event) {     if (keyevent.keycode_camera == keycode /* && event.islongpress() */) {         takepicture();         return true;     }     if (keyevent.keycode_back == keycode) {         finish();         return true;     }     return false; }  private void takepicture() {     camera.takepicture(null, null, this); }  private serviceconnection mconnection = new serviceconnection() {      @override     public void onserviceconnected(componentname classname, ibinder service) {         // we've bound localservice, cast ibinder , localservice instance         mservice = ((servicesensor.localbinder) service).getservice();         mservice.sethandler(null);          mbound = true;     }      @override     public void onservicedisconnected(componentname arg0) {         mbound = false;     } };  @override protected void onstart() {     super.onstart();     intent intent = new intent(this, servicesensor.class);     if (searchservice.search(this, "servicesensor")) {         bindservice(intent, mconnection, context.bind_not_foreground);     } }  @override protected void onstop() {     super.onstop();     if (mbound) {         unbindservice(mconnection);         mbound = false;     } } } 

(the comments in french working french colleague, although don't speak french much.)

this implementation of surfacecreated method of surfaceholder.callback, works fine, please check if missing in implementation

public void surfacecreated(surfaceholder holder) {         // surface has been created, acquire camera , tell         // draw.         try {             log.d(tag, "surfacecreated(), holder"+holder.tostring());             mcamera = null;             mcamera = camera.open();             log.d(tag, "surfacecreated(), mcamera="+mcamera);             mcamera.setdisplayorientation(90);             mcamera.setpreviewdisplay(holder);             camera.parameters params= mcamera.getparameters();             params.set("jpeg-quality", 72);             params.set("rotation", 90);             params.set("orientation", "portrait");             params.setpictureformat(pixelformat.jpeg);                     mcamera.setparameters(params);             createzoomlayout();          } catch (exception e) {             toast.maketext(camerainterface.this,                     " surfacecreated " + e.getmessage(), toast.length_long)                     .show();             e.printstacktrace();         }     } 

Comments

Popular posts from this blog

html5 - What is breaking my page when printing? -

c# - must be a non-abstract type with a public parameterless constructor in redis -

ajax - PHP/JSON Login script (Twitter style) not setting sessions -