달력

12

« 2019/12 »

  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  

카메라 촬영시 촬영된 사진을 스냅샵 이미지로 보여주고 SD카드에 저장하기

  • 카메라
  • 고속영상 처리 위해 SurfaceView상속한 클래스 정의
  • 메뉴를 통한 저장파일 관리

   

   

강의 내용

activity_main.xml

LinearLayout(Horizontal) 변경

Graphical Layout > Layouts-LinearLayout(Vertical) 추가

-Graphical Layout > Form Widgets-Button추가

-Graphical Layout > image&Media-ImageView 추가

<kr.android.camera.MyCameraSurface

  

AndroidManifest.xml

<uses-permission android:name="android.permission.CAMERA"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

MainActivity.java

//고속영상을 제공하는 뷰 정의

-//객체 선언

-//생성자를 통해 XML에 등록

-//표면 생성시 카메라 오픈하고 미리보기 설정 -surfaceCreated

-//SurfaceView의 화면 크기가 바뀌는 등의 변경 시점에 미리보기 시작-surfaceChanged

-//Surface파괴시 카메라도 자원정리-surfaceDestroyed

//이벤트 처리

-ShutterCallback

-PictureCallback / PictureCallback//사진 저장

//메뉴 등록(겔러리 )

   

   

   

애뮬레이터에 카메라 센서 활성화 시키기

   

 

   

출력 결과

Ctrl + F11 누르면 가로/세로 변환

   

Shutter 버튼 클릭

   

   

   

   

   

   

   

   

   

Posted by codedragon codedragon

댓글을 달아 주세요

Camera(카메라)

카메라를 제어할 수 있는 클래스

View에 동영상 또는 카메라 프리뷰와 같은 화면을 표시하며

빠른 화면 변화 또는 그려지는 양이 많을 경우 SurfaceView를 사용해 처리합니다.

   

   

Camera 클래스 종류

android.hardware.Camera

하드웨어 카메라 모듈을 제어합니다.

사진을 찍을 때 사용됩니다.

android.graphics.Camera

보는 시각에 따라 달라지는 3D 입체 효과를 보여 줍니다.

   

   

카메라 사용 선언문

카메라 기능을 사용하기 위해 마니페스트 파일에 다음 선언문 작성

<uses-permission android:name="android.permission.CAMERA" />

<uses-feature android:name="android.hardware.camera" />

<uses-feature android:name="android.hardware.camera.autofocus" />

   

   

카메라 생성 및 파괴

static Camera open ()

void release ()

 

Posted by codedragon codedragon

댓글을 달아 주세요

   

SurfaceView(서피스뷰)

  • 안드로이드는 OpenGL ES라이버리를 포함하고 있어 3D를 지원할 수있습니다.
  • 애플리케이션에서 3D 객체를 출력하려면 SurfaceView를 이용해야 합니다. 하드웨어 가속 기능이 있어 그래픽을 보다 빠르게 처리할 수 있습니다.
  • Surfaceview는 안드로이드의 기본 뷰 체계와 다르게 구현되어 있어 뷰를 상속하여 그래픽을 구현한 방법을 그대로 사용할 수 없습니다. 그러므로 SurfaceView를 이용한 그래픽 그리기 방법을 별도로 따라야 합니다.
  • 안드로이드의 기본 뷰 에 포함되어 있지 않기 때문에 onDraw()와 isvalidate()메소드를 사용할 수 없으며 이를 대체할 수 있는 메소드를 직접 구현해야 합니다.
  • SurfaceView는 2D그래픽도 그대로 지원합니다.
  • 카메라에서 영상을 빠르게 보여주기 위해서 광범위하게 사용됩니다.

   

   

   

   

이벤트 처리

Callback Interface는 SurfaceHolder를 통해서 작성한 Surface와 SurfaceView를 연결하기 위해서 Surface의 생성, 변경, 종료에 대한 이벤트 처리합니다.

class MyCameraSurface extends SurfaceView implements SurfaceHolder.Callback{ }

   

   

SurfaceView를 이용한 그래픽 그리기 단계

1

SurfaceView 상속하면서 Callback인터페이스 구현

2

getHolder()메소드로 SurfaceHolder객체 참조

3

SurfaceHolder객체의 addCallback()메소드를 호출하여 Callback인터페이스 설정

4

Callback 인터페이스의 surfaceCreated()메소드 재정의

5

Callback 인터페이스의 surfaceChanged()메소드 재정의

6

Callback 인터페이스의 surfaceDestroyed()메소드 재정의

   

   

Lock 잠금 기능

SurfaceView가 그래픽 작업을 할때 시스템이나 다른 어플리케이션에서 접근할 수 없도록 막는 기능을 사용합니다. (SurfaceView의 크기 변동과 동시에 그래픽을 그릴 경우 데드락이 발생합니다)

   

private void myDraw(){

Canvas _canvas = null;

   

try{

_canvas = mHolder.lockCanvas(null);

   

//객체 그리기 작업

super.draw(_canvas);

_cansvs.drawBitmap(mBitmap, 0, 0, null);

}finally{

if(_canvas!=null){

mHolder.unlockCanvasAndPost(_canvas);

}

}

}

  

   

   

SurfaceView 동작 도식도

   

   

   

SurfaceView 클래스

화면 제공

단순히 화면에 보여지는 하나의 뷰를 정의

Surface

그래픽버퍼 (데이터 제공)

SurfaceHolder 인터페이스

화면 제어

SurfaceView를 내부적으로 제어

SurfaceHolder.Callback 인터페이스

SurfaceView의 크기 변화등 상태 정보를 관리합니다.

Surface의 생성, 변경, 종료에 대한 이벤트 처리를 수행합니다.

SurfaceView에서 보여지는 화면 제어를 하기 위해서 SurfaceHolder생성하고

SurfaceHolder를 이용해서 Surface(버퍼)에 그림을 그리면 SurfaceView에 반영됩니다.

Posted by codedragon codedragon

댓글을 달아 주세요