public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.camera, container, false);
checkPermissions(); //권한 묻기
TakepictureIb_C = (ImageButton) view.findViewById(R.id.takepictureIb_camera);
TakepictureIb_C.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
camera.takePicture(null, null, jpegCallback);
}
});
if(ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
getActivity().getWindow().setFormat(PixelFormat.UNKNOWN);
SurfaceViewSfv_Camera = (SurfaceView) view.findViewById(R.id.surfaceViewSfv_camera);
surfaceHolder = SurfaceViewSfv_Camera.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
jpegCallback = new android.hardware.Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, android.hardware.Camera camera) {
FileOutputStream outStream = null;
try {
str = String.format("/sdcard/%d.jpg",
System.currentTimeMillis()); //이미지 저장경로
outStream = new FileOutputStream(str);
outStream.write(data);
outStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
Toast.makeText(getActivity(), "Picture Saved", Toast.LENGTH_LONG).show();//저장완료시
refreshCamera();//카메라 사용중지
Intent intent = new Intent();
intent.setClass(getActivity(), ImgConfirmActivity.class);
intent.putExtra("strParamName", str);
startActivity(intent);
}
};
return view;
}
public void refreshCamera() {
if (surfaceHolder.getSurface() == null) {
return;
}
try {
camera.stopPreview();
}catch (Exception e) {}
try {
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
}catch (Exception e) {}
}
@Override
public void onDestroy() {
super.onDestroy();
}
@SuppressWarnings("deprecation")
@Override
public void surfaceCreated(SurfaceHolder holder) {
Log.d("dd","dd");
if(ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
camera = Camera.open();
Camera.Parameters param = camera.getParameters();
camera.setDisplayOrientation(90);
//param.setRotation(90);
int m_resWidth;
int m_resHeight;
m_resWidth = camera.getParameters().getPictureSize().width;
m_resHeight = camera.getParameters().getPictureSize().height;
Camera.Parameters parameters = camera.getParameters();
//아래 숫자를 변경하여 자신이 원하는 해상도로 변경한다
m_resWidth = 1280;
m_resHeight = 720;
parameters.setPictureSize(m_resWidth, m_resHeight);
camera.setParameters(param);
}else{
refreshCamera();
}
try {
camera.setPreviewDisplay(holder);
camera.startPreview();
} catch (Exception e) {
System.err.println(e);
return;
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
refreshCamera();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
camera.release();
camera = null;
}
}
안드로이드 공부한지 한달정도되는 학생입니다!
다름아니라 카메라 기능 구현은 했지만 카메라 해상도가 조절이안되서
뷰가 왜곡되듯이 보이는 현상이 나타납니다 해결방법 알려주시면 감사하겠습니다!