Android 오픈 소스 라 이브 러 리 사용자 정의 카메라 모듈
카메라 모듈 라 이브 러 리,사용자 정의 카 메 라 는 간단 한 호출 을 통 해 사진 찍 기,사진 재단,비디오 와 비디오 캡 처 기능 을 실현 할 수 있다.
그림 압축 을 실현 하고 그림 의 부 피 를 줄인다.사용자 정의 카 메 라 는 시스템 카메라 로 인 한 사진 이나 동 영상 부피 가 너무 큰 문 제 를 피 할 수 있 습 니 다.
내 장 된 카메라 및 sd 카드 권한 획득 처리;
github 링크 는 다음 과 같 습 니 다.star 지원 을 도와 주세요~
github 링크
구현 기능:
-사진 찍 기
-그림 재단
녹화
-비디오 캡 처
프로젝트 에서 이 라 이브 러 리 가 져 오기
프로젝트 의 build.gradle 에 추가:
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
module 의 build.gradle 에 의존 도 를 추가 합 니 다:
dependencies {
compile 'com.github.autume:syd-camera:v1.0.0'
}
쓰다사진 을 찍다
구체 적 으로 사용 하면 demo 의 CameraTestActivity 를 참고 할 수 있 습 니 다.
시동 카메라
다음 방식 을 참조 하여 사진 품질,사진 최소 너비 설정,카메라 미리 보기 인터페이스 최소 너비 설정 을 전송 하고 사진 인터페이스 로 직접 이동 하여 사진 을 찍 습 니 다.
관련 설정 인자:
-picQuality:이미지 품질 0~100,기본 값 80
-picWidth:사진 최소 너비 설정,기본 값 800
-preview Width:카메라 미리 보기 인터페이스 최소 너비 설정,기본 값 1280
-pictureSize:사진 사이즈 제한,단위 kb,저장 하지 않 으 면 이미지 품질 에 따라 압축 되 며,실제 압축 된 크기 는 이 값 보다 약간 클 수 있 음
Intent intent = new Intent(CameraTestActivity.this, SydCameraActivity.class);
intent.putExtra(CameraParaUtil.picQuality, 70); // 0~100
intent.putExtra(CameraParaUtil.picWidth, 1536); // ,
intent.putExtra(CameraParaUtil.previewWidth, 1280); // ,
startActivityForResult(intent, CameraParaUtil.cameraRequestCode);
사진 을 받 고 돌아오다사진 반환 에서 저 장 된 사진 경 로 를 가 져 온 후 필요 에 따라 사진 을 처리 할 수 있 습 니 다.경로 획득 방식:picturePath=data.getStringExtra(CameraParaUtil.picturePath);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Log.i(TAG, "onActivityResult resultCode:" + resultCode + ",requestCode: " + requestCode);
if (resultCode == Activity.RESULT_CANCELED){
Log.i(TAG, " !");
return;
}
if (resultCode != Activity.RESULT_OK){
Log.w(TAG, " !");
return;
}
if (requestCode == CameraParaUtil.cameraRequestCode) {
String picturePath;
picturePath = data.getStringExtra(CameraParaUtil.picturePath);
img_photo.setImageBitmap(BitmapFactory.decodeFile(picturePath));
Log.d(TAG, "onActivityResult picturePath: " + picturePath);
}
}
그림 재단재단 시작
다음 방식 을 참조 하여 그림 의 질,재단 을 기다 리 는 그림 경 로 를 전달 하고 재단 인터페이스 로 직접 이동 하여 그림 재단 을 한다.
관련 설정 인자:
-cropQuality:이미지 품질 0~100,기본 값 80
-cropTitle:화면 제목 자 르 기
-cropDestPicPath:재단 한 그림 이 있 는 폴 더 이름
-cropSrcPicPath:편집 할 원본 파일 경로
private void startCrop(String path) {
Intent intent = new Intent(CameraTestActivity.this, IcomwellCropActivity.class);
intent.putExtra(CropParaUtil.cropQuality, 70); // 0~100
intent.putExtra(CropParaUtil.cropTitle, " ");
intent.putExtra(CropParaUtil.cropSrcPicPath, path);
startActivityForResult(intent, CropParaUtil.REQUEST_CODE_FROM_CUTTING);
}
커팅 받 고 돌아 가기재단 에서 저 장 된 재단 후 그림 경 로 를 가 져 온 후 필요 에 따라 그림 을 처리 할 수 있 습 니 다.경로 가 져 오기:data.getStringExtra(CropParaUtil.cropDestPicPath);
switch (requestCode) {
case CropParaUtil.REQUEST_CODE_FROM_CUTTING:
String cropDestPicPath;
cropDestPicPath = data.getStringExtra(CropParaUtil.cropDestPicPath);
img_photo.setImageBitmap(BitmapFactory.decodeFile(cropDestPicPath));
Log.d(TAG, "onActivityResult cropDestPicPath: " + cropDestPicPath);
break;
default:
break;
}
사용자 정의 그림 재단 UI사용자 정의 재단 인터페이스 U 가 필요 하 다 면 SydCropActivity,사용자 정의 레이아웃 을 참고 하 십시오.
비디오 기능
다음 방식 을 참조 하여 관련 매개 변 수 를 전송 하고 비디오 인터페이스 로 직접 이동 하여 비디오 를 한다.
관련 설정 인자:
-picQuality:비디오 품질 0~100,기본 값 80
-picWidth:비디오 최소 너비 설정,기본 값 800
-preview Width:카메라 미리 보기 인터페이스 최소 너비 설정,기본 값 1280
-pictureSize:사진 사이즈 제한,단위 kb,저장 하지 않 으 면 이미지 품질 에 따라 압축 되 며,실제 압축 된 크기 는 이 값 보다 약간 클 수 있 음
-picDuration:자동 캡 처 시간 간격,단위 초,기본 3600 초,0 이하 로 들 어 오 면 자동 캡 처 를 닫 습 니 다.
-video 지속 시간:비디오 세그먼트 간격,단위 초,기본 1800 초
사진 과 비디오 는 각각 sydPhoto,sydVideo 폴 더 아래 에 있 습 니 다.
private void startVideo() {
Intent intent = new Intent(CameraTestActivity.this, SydVideoActivity.class);
intent.putExtra(CameraParaUtil.picQuality, 70); // 0~100
intent.putExtra(CameraParaUtil.picWidth, 1536); // ,
intent.putExtra(CameraParaUtil.previewWidth, 1280); // ,
startActivityForResult(intent, CameraParaUtil.REQUEST_CODE_FROM_VIDEO);
}
특수 상황 호 환 처리삼 성 A8 에서 파일 을 저장 할 권한 이 없 는 문제 가 발생 했 는데,처리 방식 은 사진 을 찍 거나 재단 한 그림 을 비트 맵 에 저장 하고 비트 맵 으로 바로 되 돌려 주 는 것 이다.
// , croppedBitmap
public static Bitmap croppedBitmap;
// , pictureBitmap,
public static Bitmap pictureBitmap;
/**
* A8 ,
* ..
* @param resultCode
*/
private void onResultExceptionHandle(int resultCode) {
// , A8 , CameraParaUtil.pictureBitmap
if (resultCode == CameraParaUtil.REQUEST_CODE_FROM_CAMERA_FAIL && CameraParaUtil.pictureBitmap != null) {
if (Invoke.isPicNeedDeal) {
// pictureBitmap
startCropForBitmap();
} else {
//
uploadPicture(CameraParaUtil.pictureBitmap);
}
}
// , A8 , CropParaUtil.croppedBitmap
if (resultCode == CropParaUtil.REQUEST_CODE_FROM_CUTTING_FAIL && CropParaUtil.croppedBitmap != null) {
uploadPicture(CropParaUtil.croppedBitmap);
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.