java - Save image taken to a specific directory with specific name -
i having trouble saving image taken specific directory specific name. have no idea how it. below code.
cameracaptureimage.java
public class capturecameraimage extends activity {      public static int cameraid = 0;     public static boolean isblack = true;     public static imageview image;      @override     public void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activitycapturecameraimage);         image = (imageview) findviewbyid(r.id.imgview);     }        public void onbackclick(view v){           cameraid = 0;         intent = new intent(capturecameraimage.this,cameraview.class);         startactivityforresult(i, 999);     }  } cameraview.java
public class cameraview extends activity implements surfaceholder.callback, onclicklistener{         private static final string tag = "cameratest";         camera mcamera;         boolean mpreviewrunning = false;          @suppresswarnings("deprecation")         public void oncreate(bundle icicle){             super.oncreate(icicle);             log.e(tag, "oncreate");              getwindow().setformat(pixelformat.translucent);             requestwindowfeature(window.feature_no_title);             getwindow().setflags(windowmanager.layoutparams.flag_fullscreen,windowmanager.layoutparams.flag_fullscreen);             setcontentview(r.layout.cameraview);             imageview img = (imageview) findviewbyid(r.id.blankimage);              if(capturecameraimage.isblack)                 img.setbackgroundresource(android.r.color.black);             else                 img.setbackgroundresource(android.r.color.white);              msurfaceview = (surfaceview) findviewbyid(r.id.surface_camera);             msurfaceview.setonclicklistener(this);             msurfaceholder = msurfaceview.getholder();             msurfaceholder.addcallback(this);             msurfaceholder.settype(surfaceholder.surface_type_push_buffers);          }          @override         protected void onrestoreinstancestate(bundle savedinstancestate){             super.onrestoreinstancestate(savedinstancestate);         }           camera.picturecallback mpicturecallback = new camera.picturecallback() {              public void onpicturetaken(byte[] data, camera camera) {                 // todo auto-generated method stub                 if (data != null){                     //intent mintent = new intent();                     //mintent.putextra("image",imagedata);                      mcamera.stoppreview();                     mpreviewrunning = false;                     mcamera.release();                       try{                          bitmapfactory.options opts = new bitmapfactory.options();                          bitmap bitmap= bitmapfactory.decodebytearray(data, 0, data.length,opts);                          bitmap = bitmap.createscaledbitmap(bitmap, 300, 300, false);                          int width = bitmap.getwidth();                          int height = bitmap.getheight();                          int newwidth = 300;                          int newheight = 300;                           // calculate scale - in case = 0.4f                          float scalewidth = ((float) newwidth) / width;                          float scaleheight = ((float) newheight) / height;                           // createa matrix manipulation                          matrix matrix = new matrix();                          // resize bit map                          matrix.postscale(scalewidth, scaleheight);                          // rotate bitmap                          matrix.postrotate(90);                          bitmap resizedbitmap = bitmap.createbitmap(bitmap, 0, 0,                                  width, height, matrix, true);                          capturecameraimage.image.setimagebitmap(resizedbitmap);                       }catch(exception e){                          e.printstacktrace();                      }                     //storebyteimage(mcontext, imagedata, 50,"imagename");                     //setresult(foto_mode, mintent);                     setresult(585);                     finish();                 }                    }         };          protected void onresume(){             log.e(tag, "onresume");             super.onresume();         }          protected void onsaveinstancestate(bundle outstate){             super.onsaveinstancestate(outstate);         }          protected void onstop(){             log.e(tag, "onstop");             super.onstop();         }          @targetapi(9)         public void surfacecreated(surfaceholder holder){             log.e(tag, "surfacecreated");             mcamera = camera.open(capturecameraimage.cameraid);         }          public void surfacechanged(surfaceholder holder, int format, int w, int h) {             log.e(tag, "surfacechanged");              // xxx stoppreview() crash if preview not running             if (mpreviewrunning){                 mcamera.stoppreview();             }              camera.parameters p = mcamera.getparameters();             p.setpreviewsize(300, 300);              if(capturecameraimage.cameraid == 0){                 string stringflashmode = p.getflashmode();                 if (stringflashmode.equals("torch"))                         p.setflashmode("on"); // light set off, flash set normal 'on' mode                 else                         p.setflashmode("torch");             }              mcamera.setparameters(p);             try{                 mcamera.setpreviewdisplay(holder);             }catch (exception e){                 // todo auto-generated catch block                 e.printstacktrace();             }             mcamera.startpreview();             mpreviewrunning = true;             mcamera.takepicture(null, mpicturecallback, mpicturecallback);         }          public void surfacedestroyed(surfaceholder holder) {             log.e(tag, "surfacedestroyed");             //mcamera.stoppreview();             //mpreviewrunning = false;             //mcamera.release();         }          private surfaceview msurfaceview;         private surfaceholder msurfaceholder;          public void onclick(view v) {             // todo auto-generated method stub             mcamera.takepicture(null, mpicturecallback, mpicturecallback);         }      } 
to capture image , save in specific folder, have :
- request permission on runtime (api 23)
- request image capture
- create folder
first of all, if target api 23, have follow new permission system asks user grant when used first time. in case, need have write_external_storage granted.
    boolean haspermission = (contextcompat.checkselfpermission(this,             manifest.permission.write_external_storage) == packagemanager.permission_granted);      if (!haspermission) {         activitycompat.requestpermissions(this,                 new string[]{manifest.permission.write_external_storage},                 request_write_storage);     } then, need create implicit intent capture photo. camera app appear in app chooser or selected automatically depending on user settings , installed apps.
intent intent = new intent(mediastore.action_image_capture);  startactivityforresult(intent, request_image_capture); // final int = 1 finally, need create folder , indicate output android know save picture.
//intent = new intent...                      long timestamp = system.currenttimemillis();                      file file = new file("");                          file = new file(environment.getexternalstoragedirectory()                             + file.separator                             + "dcim"                             + file.separator                             + address                             + file.separator                             , "img_" + string.valueof(timestamp) + ".jpg");  intent.putextra(mediastore.extra_output, uri.fromfile(file));  //startactivityforresult... there lot of storage possibilities. can take here : https://developer.android.com/training/basics/data-storage/files.html
i have done nothing special in onactivityresult callback method. show toast confirm user picture saved successfully. code above in onclicklistener of imageview in case.
Comments
Post a Comment