Saving picture to SD card

All your problems with Audio, Video and Images.

Saving picture to SD card

Postby Falmarri » Sun Feb 28, 2010 4:10 am

So I've been banging my head against a wall here. I know this code isn't the best, as I don't tell it what to do after taking the picture. But it doesn't even create the file capture.jpg on my sd card on my phone. I just tried it in the emulator though and it's working. I have no idea what the problem is. I included
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
In my manifest.

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2. package ece473.hw03;
  3.  
  4.  
  5.  
  6. import java.io.File;
  7.  
  8. import java.io.FileOutputStream;
  9.  
  10. import java.io.FileWriter;
  11.  
  12. import java.io.IOException;
  13.  
  14. import java.io.OutputStream;
  15.  
  16.  
  17.  
  18. import android.app.Activity;
  19.  
  20. import android.graphics.Bitmap;
  21.  
  22. import android.graphics.BitmapFactory;
  23.  
  24. import android.graphics.PixelFormat;
  25.  
  26. import android.graphics.Bitmap.CompressFormat;
  27.  
  28. import android.os.Bundle;
  29.  
  30. import android.os.Environment;
  31.  
  32. import android.view.MotionEvent;
  33.  
  34. import android.view.SurfaceHolder;
  35.  
  36. import android.view.SurfaceView;
  37.  
  38. import android.view.View;
  39.  
  40. import android.view.Window;
  41.  
  42. import android.view.WindowManager;
  43.  
  44. import android.view.View.OnTouchListener;
  45.  
  46.  
  47.  
  48. import android.hardware.Camera;
  49.  
  50. import android.hardware.Camera.Size;
  51.  
  52.  
  53.  
  54. public class CameraView extends Activity
  55.  
  56. implements SurfaceHolder.Callback, OnTouchListener {
  57.  
  58.        
  59.  
  60.         protected SurfaceView mSurfaceView;
  61.  
  62.         protected SurfaceHolder mSurfaceHolder;
  63.  
  64.         protected boolean mPreviewRunning = false;
  65.  
  66.        
  67.  
  68.         protected static Camera mCamera;
  69.  
  70.        
  71.  
  72.         protected Camera.PictureCallback mPictureCallback;
  73.  
  74.  
  75.  
  76.        
  77.  
  78.         @Override
  79.  
  80.     public void onCreate(Bundle savedInstanceState) {
  81.  
  82.         super.onCreate(savedInstanceState);
  83.  
  84.        
  85.  
  86.         getWindow().setFormat(PixelFormat.TRANSLUCENT);
  87.  
  88.  
  89.  
  90.         requestWindowFeature(Window.FEATURE_NO_TITLE);
  91.  
  92.  
  93.  
  94.         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
  95.  
  96.  
  97.  
  98.         WindowManager.LayoutParams.FLAG_FULLSCREEN);
  99.  
  100.  
  101.  
  102.         setContentView(R.layout.camera_surface);
  103.  
  104.  
  105.  
  106.         mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera);
  107.  
  108.  
  109.  
  110.          mSurfaceHolder = mSurfaceView.getHolder();
  111.  
  112.  
  113.  
  114.         mSurfaceHolder.addCallback(this);
  115.  
  116.  
  117.  
  118.         mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  119.  
  120.      
  121.  
  122.    
  123.  
  124.        
  125.  
  126.         mPictureCallback = new Camera.PictureCallback() {
  127.  
  128.  
  129.  
  130.                 public void onPictureTaken(byte[] imageData, Camera c) {
  131.  
  132.                         String dirpath = Environment.getExternalStorageDirectory().getAbsolutePath();
  133.  
  134.                        
  135.  
  136.                                
  137.  
  138.                
  139.  
  140.                        
  141.  
  142.                         try{
  143.  
  144.                                
  145.  
  146.                                 Bitmap image = BitmapFactory.decodeByteArray(imageData, 0, imageData.length);
  147.  
  148.                                 String fname = "capture.jpg";
  149.  
  150.                                
  151.  
  152.                                
  153.  
  154.                                
  155.  
  156.                                 FileOutputStream outputStream = null;
  157.  
  158.                                 File dir = new File(dirpath);
  159.  
  160.                                 if (!dir.exists()) dir.mkdirs();
  161.  
  162.                                 File file = new File(dirpath, fname);
  163.  
  164.                     outputStream = new FileOutputStream(file);
  165.  
  166.                                 image.compress(CompressFormat.JPEG, 100, outputStream);
  167.  
  168.                     outputStream.flush();
  169.  
  170.                     outputStream.close();
  171.  
  172.                                
  173.  
  174.                                
  175.  
  176.                         }catch(Exception e){
  177.  
  178.                                
  179.  
  180.                                
  181.  
  182.                                
  183.  
  184.                         }
  185.  
  186.                        
  187.  
  188.  
  189.  
  190.                 }
  191.  
  192.  
  193.  
  194.                 };
  195.  
  196.        
  197.  
  198.        
  199.  
  200.         }
  201.  
  202.        
  203.  
  204.        
  205.  
  206.        
  207.  
  208.  
  209.  
  210.         @Override
  211.  
  212.         public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
  213.  
  214.                 // TODO Auto-generated method stub
  215.  
  216.                
  217.  
  218.                 if (mPreviewRunning) {
  219.  
  220.  
  221.  
  222.                         mCamera.stopPreview();
  223.  
  224.  
  225.  
  226.                         }
  227.  
  228.  
  229.  
  230.                         Camera.Parameters p = mCamera.getParameters();
  231.  
  232.  
  233.  
  234.                         p.setPreviewSize(w, h);
  235.  
  236.  
  237.  
  238.                         mCamera.setParameters(p);
  239.  
  240.  
  241.  
  242.                         try {
  243.  
  244.  
  245.  
  246.                         mCamera.setPreviewDisplay(holder);
  247.  
  248.  
  249.  
  250.                         } catch (IOException e) {
  251.  
  252.  
  253.  
  254.                         e.printStackTrace();
  255.  
  256.  
  257.  
  258.                         }
  259.  
  260.  
  261.  
  262.                         mCamera.startPreview();
  263.  
  264.  
  265.  
  266.                         mPreviewRunning = true;
  267.  
  268.  
  269.  
  270.         }
  271.  
  272.  
  273.  
  274.         @Override
  275.  
  276.         public void surfaceCreated(SurfaceHolder holder) {
  277.  
  278.                 // TODO Auto-generated method stub
  279.  
  280.                
  281.  
  282.                 mCamera = Camera.open();
  283.  
  284.                
  285.  
  286.         }
  287.  
  288.  
  289.  
  290.         @Override
  291.  
  292.         public void surfaceDestroyed(SurfaceHolder holder) {
  293.  
  294.                 // TODO Auto-generated method stub
  295.  
  296.                
  297.  
  298.                
  299.  
  300.                 mCamera.stopPreview();
  301.  
  302.  
  303.  
  304.                 mPreviewRunning = false;
  305.  
  306.  
  307.  
  308.                 mCamera.release();
  309.  
  310.                
  311.  
  312.                
  313.  
  314.         }
  315.  
  316.  
  317.  
  318.  
  319.  
  320.         @Override
  321.  
  322.         public boolean onTouchEvent(MotionEvent event) {
  323.  
  324.                
  325.  
  326.                 mCamera.takePicture(null, mPictureCallback, mPictureCallback);
  327.  
  328.                
  329.  
  330.                 //mCamera.startPreview();
  331.  
  332.                
  333.  
  334.                
  335.  
  336.                 return true;
  337.  
  338.                
  339.  
  340.         }
  341.  
  342.  
  343.  
  344.         @Override
  345.  
  346.         public boolean onTouch(View v, MotionEvent event) {
  347.  
  348.                 // TODO Auto-generated method stub
  349.  
  350.                 return false;
  351.  
  352.         }
  353.  
  354.  
  355.  
  356. }
  357.  
  358.  
Parsed in 0.045 seconds, using GeSHi 1.0.8.4


Am I clearly doing something wrong? I've tried several ways of saving the image, from writing it directly in the filestream to using the bitmap factory.
Falmarri
Freshman
Freshman
 
Posts: 8
Joined: Tue Jan 19, 2010 2:28 am

Top

Re: Saving picture to SD card

Postby pskink » Sun Feb 28, 2010 10:06 am

Falmarri wrote:
Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2.                         try{
  3.                                 Bitmap image = BitmapFactory.decodeByteArray(imageData, 0, imageData.length);
  4.                                 String fname = "capture.jpg";
  5.                                
  6.                         FileOutputStream outputStream = null;
  7.                                 File dir = new File(dirpath);
  8.                                 if (!dir.exists()) dir.mkdirs();
  9.                                 File file = new File(dirpath, fname);
  10.                     outputStream = new FileOutputStream(file);
  11.                                 image.compress(CompressFormat.JPEG, 100, outputStream);
  12.                     outputStream.flush();
  13.                     outputStream.close();
  14.                         }catch(Exception e){
  15.                         }
  16.  
  17.  
Parsed in 0.033 seconds, using GeSHi 1.0.8.4


Am I clearly doing something wrong?.


catching 'Exception e' and doing nothing is sure wrong thing
pskink
pskink
Master Developer
Master Developer
 
Posts: 719
Joined: Mon Nov 24, 2008 3:49 pm

Postby Falmarri » Sun Feb 28, 2010 10:36 am

Yeah but that's a whole nother issue.
Falmarri
Freshman
Freshman
 
Posts: 8
Joined: Tue Jan 19, 2010 2:28 am

Postby pskink » Sun Feb 28, 2010 11:49 am

Falmarri wrote:Yeah but that's a whole nother issue.


why? your post has title that you have problems with saving and your saving code completely ignores any Exceptions
pskink
pskink
Master Developer
Master Developer
 
Posts: 719
Joined: Mon Nov 24, 2008 3:49 pm

Top

Return to Multimedia Problems

Who is online

Users browsing this forum: No registered users and 27 guests