반응형
Camera PreView 화면 캡처 및 배경 이미지 적용
이번에는 프리뷰 화면 배경에 이미지를 추가하는 법입니다.
xml에 배경이미지를 추가합니다.
<LinearLayout
android:orientation="horizontal"
android:background="#32000000"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="80dp">
<ImageView
android:id="@+id/ivFrame1"
android:layout_marginRight="20dp"
android:src="@drawable/frame1"
android:scaleType="fitXY"
android:layout_width="60dp"
android:layout_height="60dp" />
<ImageView
android:id="@+id/ivFrame2"
android:src="@drawable/frame2"
android:layout_width="60dp"
android:layout_height="60dp" />
</LinearLayout>
* 블로그에서 구현한 방식은 Preview화면 앞에 배경이 투명인 이미지를 추가하여 마치 배경이 있는 카메라 화면인 것처럼 만들었다.
Preview화면에 직접 오버레이 된 방식이 아니므로 캡처시 카메라이미지 + 선택한 배경 이미지를 합성했습니다.
btnTransform.setOnClickListener{
//전면, 후면 전환시 배경 이미지를 초기화 해줍니다.
ivFrameSet.setImageDrawable(null)
transformCamera()
}
ivFrame1.setOnClickListener{
ivFrameSet.setImageResource(R.drawable.frame1)
myCameraPreview?.setFrameId(R.drawable.frame1)
}
이렇게 설정 되면
mCameraPreview의 setFrameId함수를 통해 배경 이미지를 캡처시 합성 할 수 있게 됩니다.
전면과 후면 카메라를 바꿔주는 transformCamera함수 또한 추가해 줍니다.
private fun transformCamera(){
if(CAMERA_FACING == Camera.CameraInfo.CAMERA_FACING_FRONT){
CAMERA_FACING = Camera.CameraInfo.CAMERA_FACING_BACK
cameraPreview.removeAllViews()
startCamera()
}else{
CAMERA_FACING = Camera.CameraInfo.CAMERA_FACING_FRONT
cameraPreview.removeAllViews()
startCamera()
}
}
_MyCameraPreview.java
private int frameId = 0
적용 시킬 frameId 값을 전역 변수로 선언해 줍니다.
/**
* 이미지 캡처시 배경 선택
*/
public void setFrameId(int frameId){
this.frameId = frameId;
}
setFrameId함수를 추가해 배경 이미지의 id값을 받아옵니다.
private Camera.PictureCallback jpegCallback = new Camera.PictureCallback(){
public void onPictureTaken(byte[] data, Camera camera){
...
/**
* frameId가 있는 경우 해당 이미지를 합성해 준다.
*/
int width = bitmap.getWidth();
int height = bitmap.getHeight();
if(0 != frameId){
Bitmap bp = BitmapFactory.decodeResource(getContext().getResources(), frameId);
Bitmap resizeBp = Bitmap.createScaledBitmap(bp, width, height, true);
Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(resizeBp, 0f, 0f, null);
}
...
//파일로 저장
new MyCameraPreview.SaveImageTask().execute(currentData)
}
}
frameId가 0이 아닌 경우 해당 이미지를 bitmap변환 후 Canvas를 통해 이미지를 합성해 줍니다.
이렇게 설정하면 내가 배경으로 지정한 이미지와 함께 화면이 캡처 됩니다.
참조 :
https://black-jin0427.tistory.com/86?category=727620
반응형
'안드로이드' 카테고리의 다른 글
[Android] 프로가드(Proguard)에 대해 알아 보자 (0) | 2022.10.25 |
---|---|
파일다운로드 retrofit2 rxjava (0) | 2022.10.25 |
[Android] Camera Preview를 화면 캡처 및 배경 이미지 적용 (2) (0) | 2022.10.25 |
[Android] Camera PreView 화면 캡처 및 배경 이미지 적용 (1) (0) | 2022.10.25 |
[Android] 외부 스킴(Custom Url Scheme) 사용 방법 (0) | 2022.10.25 |