Getting a black screen after save photo - Android Camera -
i'm developing application android captures max fps , saves sd card.
the problem saved photo black screen, , can't understand why.
can tell me problem?
the code this:
public class photofragment extends fragment { private photographic camera cam; private camerapreview campreview; private boolean recording = false; private arraylist<byte[]> fotos; private arraylist<string> tempos; private thread thread; public photofragment() { } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view rootview = inflater.inflate(r.layout.fragment_photofinish, container, false); cam = getcamerainstance(); if(cam != null) { cam.setdisplayorientation(90); // set photographic camera parameters camera.parameters cameraparameters = cam.getparameters(); //set color efects none cameraparameters.setcoloreffect(camera.parameters.effect_none); //set antibanding none if (cameraparameters.getantibanding() != null) { cameraparameters.setantibanding(camera.parameters.antibanding_off); } // set white ballance if (cameraparameters.getwhitebalance() != null) { cameraparameters.setwhitebalance(camera.parameters.white_balance_cloudy_daylight); } //set flash if (cameraparameters.getflashmode() != null) { cameraparameters.setflashmode(camera.parameters.flash_mode_off); } //set zoom if (cameraparameters.iszoomsupported()) { cameraparameters.setzoom(0); } //set focus mode cameraparameters.setfocusmode(camera.parameters.focus_mode_infinity); list<size> sizes = cameraparameters.getsupportedpicturesizes(); camera.size size = sizes.get(0); cameraparameters.setpicturesize(size.width, size.height); cam.setparameters(cameraparameters); fotos = new arraylist<byte[]>(); tempos = new arraylist<string>(); campreview = new camerapreview(this.getactivity(), cam); framelayout preview = (framelayout) rootview.findviewbyid(r.id.camera_preview); preview.addview(campreview); textview startrecording = (textview) rootview.findviewbyid(r.id.start_record_button); startrecording.setonclicklistener( new view.onclicklistener() { public void onclick(view v) { if(!recording) { recording = true; size previewsize = cam.getparameters().getpreviewsize(); int databuffersize=(int)(previewsize.height*previewsize.width*(imageformat.getbitsperpixel(cam.getparameters().getpreviewformat())/8.0)); thread.start(); cam.addcallbackbuffer(new byte[databuffersize]); cam.addcallbackbuffer(new byte[databuffersize]); cam.addcallbackbuffer(new byte[databuffersize]); cam.setpreviewcallbackwithbuffer(new previewcallback() { public void onpreviewframe(byte[] imagedata, photographic camera arg1) { seek { fotos.add(imagedata); tempos.add(new simpledateformat("hh_mm_ss_sss", locale.getdefault()).format(new date())); } catch(exception e) { system.out.println("erro: " + e); } } }); } else { recording = false; seek { thread.join(); } grab (exception e) { } } } }); thread = new thread(new runnable() { public void run() { while(recording) { if(fotos.size()>0 && tempos.size()>0) { file picturefile = getoutputmediafile(1, tempos.get(0)); if (picturefile == null){ system.out.println("error creating media file, check storage permissions: "); return; } seek { fileoutputstream fos = new fileoutputstream(picturefile); fos.write(fotos.get(0)); fos.close(); picturefile = null; cam.addcallbackbuffer(fotos.get(0)); fotos.remove(0); tempos.remove(0); } grab (filenotfoundexception e) { system.out.println("erro file not found! : " + e); } grab (ioexception e) { system.out.println("erro ioexception!"); } } } } }); } else { toast.maketext(getactivity(), "camera not available", toast.length_long).show(); } homecoming rootview; } public static photographic camera getcamerainstance(){ photographic camera c = null; seek { c = camera.open(); } grab (exception e){ } homecoming c; } @override public void ondestroyview() { super.ondestroyview(); cam.release(); } private static file getoutputmediafile(int type, string timestamp){ file mediastoragedir = new file(environment.getexternalstoragepublicdirectory(environment.directory_pictures), "l_p"); if (! mediastoragedir.exists()){ if (! mediastoragedir.mkdirs()){ system.out.println("l_p failed create directory"); homecoming null; } } string timestampday = new simpledateformat("ddmmyyyy", locale.getdefault()).format(new date()); new file(mediastoragedir.getpath() + file.separator + timestampday).mkdirs(); file mediafile; if (type == 1){ mediafile = new file(mediastoragedir.getpath() + file.separator + timestampday + file.separator + "img_"+ timestamp + ".jpg"); } else if(type == 2) { mediafile = new file(mediastoragedir.getpath() + file.separator + "vid_"+ timestamp + ".mp4"); } else { homecoming null; } homecoming mediafile; } }
you claiming file jpeg. however, have done nil convert image jpeg. preview frames, default, not jpeg, in nv21 format. utilize getsupportedpreviewformats() see if jpeg previews possible, utilize setpreviewformat() request jpeg previews.
and, noted in previous question, not have 2 threads working arraylist. also, not have background thread busy-wait looking image show on arraylist. utilize linkedblockingqueue or else thread-safe , allows background thread block while waiting image.
android camera screen photo
No comments:
Post a Comment