2013-12-11 1 views
1
public class AndroidCamera extends Activity implements SurfaceHolder.Callback{ 

Camera camera; 
SurfaceView surfaceView; 
SurfaceHolder surfaceHolder; 
boolean previewing = false;; 
PictureCallback rawCallback; 
ShutterCallback shutterCallback; 
PictureCallback jpegCallback; 
private Bitmap bitmap; 
TextView colorRGB; 
Config config; 
String callname; 
String callnamePimage; 
String callnameRimage; 
String name = null; 


EditText txtData, Info,Age; 

ImageView imageView = null; 
ImageView imageView2 = null; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Button buttonStartCameraPreview = (Button)findViewById(R.id.startcamerapreview); 
    Button buttonStopCameraPreview = (Button)findViewById(R.id.stopcamerapreview); 
    Button buttonCapturePreview = (Button) findViewById(R.id.capturepreview); 
    Button testButton = (Button) findViewById(R.id.testButton); 


    txtData = (EditText) findViewById(R.id.editText1); 
    Info = (EditText) findViewById(R.id.Name); 
    Info.setHint("enter name"); 
    Age = (EditText) findViewById(R.id.Age); 
    Age.setHint("Age"); 



    getWindow().setFormat(PixelFormat.UNKNOWN); 
    surfaceView = (SurfaceView)findViewById(R.id.surfaceview); 
    surfaceHolder = surfaceView.getHolder(); 
    surfaceHolder.addCallback(this); 


    imageView=(ImageView)findViewById(R.id.imageView1); 

    imageView2=(ImageView)findViewById(R.id.imageView2); 


    rawCallback = new PictureCallback() 
    { 
     public void onPictureTaken(byte[] data, Camera camera) 
     { 
      Log.d("Log", "onPictureTaken - raw"); 
     } 
    }; 

    shutterCallback = new ShutterCallback() 
    { 
     public void onShutter() { 
      Log.i("Log", "onShutter'd"); 
     } 
    }; 

    jpegCallback = new PictureCallback() 
    { 
     public void onPictureTaken(byte[] data, Camera camera) 
     { 

      Intent imageIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      File imagesFolder = new File(Environment.getExternalStorageDirectory(), "/Raw Image"); 
      imagesFolder.mkdirs(); 
      Date d = new Date(); 
      CharSequence s = DateFormat.format("MM-dd-yy hh-mm-ss", d.getTime()); 
      name = s.toString() + ".jpg";    
       File output = new File(imagesFolder, name); 


      Uri uriSavedImage = Uri.fromFile(output); 
      imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage); 

      OutputStream imageFileOS; 

      try { 
       imageFileOS = getContentResolver().openOutputStream(uriSavedImage); 
       imageFileOS.write(data); 
       imageFileOS.flush(); 
       imageFileOS.close(); 

       Toast.makeText(AndroidCamera.this, 
         "Image saved: ", 
         Toast.LENGTH_LONG).show(); 

       } 
      catch (FileNotFoundException e) 
       { 
       e.printStackTrace(); 
       } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 
      finally 
      {} 
      Log.d("Log", "onPictureTaken - jpeg"); 

      callname = "/sdcard/Raw Image/" + name; 
      Bitmap bitmap = BitmapFactory.decodeFile(callname); 

      //imageView.setImageBitmap(bitmap);//Displaying raw Image 
      displayimages(); 
    } 
    } 


    buttonStartCameraPreview.setOnClickListener(new Button.OnClickListener() 
    { 

     @TargetApi(Build.VERSION_CODES.GINGERBREAD) 
     @Override 
     public void onClick(View v) 
     { 
      if(!previewing) 
      { 
       camera = Camera.open(0); 
       if (camera != null) 
       { 

        try { 

         camera.setPreviewDisplay(surfaceHolder); 
         camera.startPreview(); 
         previewing = true; 
         } 
        catch (IOException e) 
         { 

         e.printStackTrace(); 
         } 
       }else txtData.setText("null"); 
      } 
     }}); 



    buttonCapturePreview.setOnClickListener(new OnClickListener() 
    { 

     @Override 
     public void onClick(View v) 
     { 

      captureImage(); 
     } 


    }); 


    buttonStopCameraPreview.setOnClickListener(new Button.OnClickListener(){ 

     @Override 
     public void onClick(View v) 
     { 

      if(camera != null && previewing) 
      { 
       camera.stopPreview(); 
       camera.release(); 
       camera = null; 

       previewing = false; 
      } 
     }}); 


} 

private void captureImage() 
{ 
    camera.takePicture(shutterCallback, rawCallback, jpegCallback); 

} 

private void displayimages() 
{ 
    // TODO Auto-generated method stub 

      setContentView(R.layout.display); 
    callnameRimage = "/sdcard/Raw Image/" + name; 
    Bitmap bitmap1 = BitmapFactory.decodeFile(callnameRimage); 
    imageView2.setImageBitmap(bitmap1); 


} 

"main"이라는 XML 파일을 사용했으며 표면보기와 일부 버튼이 있습니다. 이걸로 Raw Image라는 폴더에 이미지를 저장했습니다. 이 이미지를 "display"라는 다른 xml 파일에있는 이미지보기로 디코딩해야합니다. 내가 프로그램을 실행하면 추락한다. 코드를 추가했습니다 ... 어디서 잘못되었는지 지적 해주십시오.동일한 프로그램에서 다른 xml 파일 호출 : android

로그 고양이 오류

12-12 10:40:48.836: E/AndroidRuntime(1362): FATAL EXCEPTION: main 
12-12 10:40:48.836: E/AndroidRuntime(1362): java.lang.NullPointerException 
12-12 10:40:48.836: E/AndroidRuntime(1362):  at com.example.imaging.AndroidCamera.displayimages(AndroidCamera.java:397) 
12-12 10:40:48.836: E/AndroidRuntime(1362):  at com.example.imaging.AndroidCamera.access$0(AndroidCamera.java:390) 
12-12 10:40:48.836: E/AndroidRuntime(1362):  at com.example.imaging.AndroidCamera$3.onPictureTaken(AndroidCamera.java:313) 
12-12 10:40:48.836: E/AndroidRuntime(1362):  at android.hardware.Camera$EventHandler.handleMessage(Camera.java:687) 
12-12 10:40:48.836: E/AndroidRuntime(1362):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-12 10:40:48.836: E/AndroidRuntime(1362):  at android.os.Looper.loop(Looper.java:137) 
12-12 10:40:48.836: E/AndroidRuntime(1362):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
12-12 10:40:48.836: E/AndroidRuntime(1362):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-12 10:40:48.836: E/AndroidRuntime(1362):  at java.lang.reflect.Method.invoke(Method.java:511) 
12-12 10:40:48.836: E/AndroidRuntime(1362):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
12-12 10:40:48.836: E/AndroidRuntime(1362):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
12-12 10:40:48.836: E/AndroidRuntime(1362):  at dalvik.system.NativeStart.main(Native Method) 
+0

충돌 보고서는 어디에 있습니까? – GrIsHu

+0

logcat 오류를 추가했습니다. 어디가 잘못되었는지 알려주십시오. – Aswathy

+0

내 대답을 확인하십시오. @ user3040168 – GrIsHu

답변

0

당신의 ImageView 아래 것은 null의 경우 레이아웃을 작성한 후 ImageView을 초기화하지 않았고 직접 작성하지 않았습니다. 그 위에 이미지를 설정하고 있습니다. 마찬가지로 아래 ImageView를 초기화 :

private void displayimages() 
{ 
    setContentView(R.layout.display); 
    callnameRimage = "/sdcard/Raw Image/" + name; 
    Bitmap bitmap1 = BitmapFactory.decodeFile(callnameRimage); 
    imageView2=(ImageView)findViewById(R.id.imageView2); //Initialize this way 
    imageView2.setImageBitmap(bitmap1); 
} 

은 초기화하여하지 onCreate()에서이 방법 imageView2 당신이 display 레이아웃을 팽창 후이 방법에 액세스하려고하기 때문이다. 그리고 그것은 레이아웃 파일에만없는 display에 있습니다.

+0

내 코드를 업데이트했습니다 ... 내 코드에 dat line이 있습니다 ... 여기에 붙여 넣으면 실수로 삭제되었습니다. 여전히 코드가 작동하지 않습니다. – Aswathy

+0

괜찮습니까?'ImageView'는'main' 레이아웃 파일이나'display' 레이아웃 파일에 있습니까? – GrIsHu

+0

만약'display' 레이아웃 파일에 있다면'onCreate' 메쏘드에서'main' 레이아웃 파일로부터 얻으려는 에러 메시지를 보게 될 것입니다. – GrIsHu

0

이 시도 : 당신이 다른 팽창 한대로에서

private void displayimages() 
    { 

    setContentView(R.layout.display); 
    callnameRimage = "/sdcard/Raw Image/" + name; 
    Bitmap bitmap1 = BitmapFactory.decodeFile(callnameRimage); 
    imageView2= (ImageView) findViewById(R.id.imageView2Id); 
    imageView2.setImageBitmap(bitmap1); 


    } 
imageView2Iddisplay 레이아웃의 ID imageView2입니다

,

+0

예 디스플레이 레이아웃에 추가되었습니다 – Aswathy

관련 문제