2014-04-01 1 views
2

Android 운영 체제에서 표면보기를 사용하여 자르기 응용 프로그램을 만들고 싶습니다. 직접 뷰 카메라를 표시하기위한 표시면을 만들었지 만 카메라 디스플레이에 직접 자르기 기능을 추가하려고 할 때 여전히 실패합니다. 이 아래의 그림 편집을 수행 할 것입니다 :SurfaceView Android에서 자르기 카메라보기를 만드는 방법

enter image description here

은 다음과 같습니다 캡처 버튼을 누른 다음을 클릭하면 아래 그림과 같이

enter image description here

이미지가 화면에 나타납니다 결과 소스 코드 MainActivity.java

package com.example.CameraPreview1; 

import java.io.IOException; 
import java.util.List; 

import curso.citic15.camara.R; 

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.hardware.Camera; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageButton; 
import android.widget.Toast; 

public class MainActivity extends Activity implements SurfaceHolder.Callback, Camera.ShutterCallback, Camera.PictureCallback { 
    private SurfaceView Surface; 
    Camera camera; 
    Bitmap InputImages; 

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

     Surface = (SurfaceView) findViewById(R.id.surface); 
     Surface.getHolder().addCallback(this); 

     ImageButton shutter = (ImageButton) findViewById(R.id.button_capture); 
     shutter.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       camera.takePicture(MainActivity.this, null, null, MainActivity.this); 
      } 
     }); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     camera.release(); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     camera.stopPreview(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public void onShutter() { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 
     if (camera != null) { 
      Camera.Parameters params = camera.getParameters(); 
      List<Camera.Size> sizes = params.getSupportedPreviewSizes(); 
      Camera.Size selected = sizes.get(0); 
      params.setPreviewSize(selected.width, selected.height); 
      camera.setParameters(params); 
      camera.setDisplayOrientation(90); 


      try { 
       camera.setPreviewDisplay(holder); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      camera.startPreview(); 
     } else { 
      Toast.makeText(this, "No hay camara o hay algœn error.", Toast.LENGTH_LONG).show(); 
     } 
    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 
     camera = Camera.open(); 
    } 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
     Log.d("", "Destroyed"); 
    } 

    @Override 
    public void onPictureTaken(byte[] data, Camera camera) { 
     BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inSampleSize = 6; 

     InputImages = BitmapFactory.decodeByteArray(data, 0, data.length, options); 

     camera.startPreview(); 
    } 

} 

이하는 소스 코드입니다. main_ac

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" > 

<SurfaceView 
    android:id="@+id/surface" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" /> 

<ImageButton 
    android:id="@+id/button_2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    android:layout_marginBottom="15dp" 
    android:layout_marginRight="20dp" 
    android:src="@drawable/dua" 
    android:background="@null" 
    /> 

<ImageButton 
    android:id="@+id/button_1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_marginBottom="15dp" 
    android:layout_marginLeft="20dp" 
    android:src="@drawable/satu" 
    android:background="@null" 
    /> 

<ImageButton 
    android:id="@+id/button_capture" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginBottom="10dp" 
    android:src="@drawable/capture" 
    android:background="@null" 
    /> 

<ImageView 
    android:id="@+id/imageView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:src="@null" /> 
</RelativeLayout> 

tivity.xml 나는 Google에서 찾아 봤는데하지만 내가 원하는 것을 제공하는 튜토리얼의 것도, 내가 스트레스와 절망의 비트 없었다. 위에 언급 된 문제를 해결하는 데 도움이됩니까 ??? 도움이된다면 매우 행복 할 것입니다. 고맙습니다.

+0

나를 도울 수있는 사람이 아무도 없다면 ??? 제발, .. ??? –

+0

솔루션을 찾으십니까? –

+0

당신은 솔루션 남자가있어> –

답변

2

확인이 튜토리얼의 동일한 경로에 덮어 쓰기 후. 드래그하여 자르기 영역을 정의 할 수있는 것보다 카메라 미리보기 및 사용자 정의보기를 표시합니다. 필요에 따라 수정할 수 있습니다. 내가 찾을 수있는 유일한 문제는 화면 방향, 미리보기 수정 및 결과 이미지 때문입니다.

http://adblogcat.com/a-camera-preview-with-a-bounding-box-like-google-goggles/

0

자르기 전에 비트 맵 그림을 저장해야합니다.

croppedBitmap = Bitmap.createBitmap(cameraBitmap, x,y, cameraBitmap.getWidth(), cameraBitmap.getHeight()); 

당신은 당신의 원본 사진

관련 문제