public
class
CameraActivity
extends
Activity {
private
Preview mPreview;
private
Boxdraw mdraw;
static
int
height;
static
int
width;
static
float
Left;
static
float
Right;
static
float
Top;
static
float
Bottom;
static
Camera mCamera;
private
Uri mImageCaptureUri;
static
Paint paint =
new
Paint();
static
String fileName;
public
static
Intent i;
public
static
String path;
private
MediaScannerConnection mediaScannerConnection;
private
Bitmap bitmap;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
super
.onCreate(savedInstanceState);
DisplayMetrics displayMetrics =
new
DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
mediaScannerConnection =
new
MediaScannerConnection(getBaseContext(),
new
MediaScannerConnectionClient() {
@Override
public
void
onScanCompleted(String arg0, Uri arg1) {
Log.d(
"null"
, getExternalFilesDir(
null
)
.getAbsoluteFile() +
"/"
+ fileName +
".jpg"
);
androidCrop(arg1);
mediaScannerConnection.disconnect();
}
@Override
public
void
onMediaScannerConnected() {
mediaScannerConnection.scanFile(
getExternalFilesDir(
null
).getAbsoluteFile()
+
"/"
+ fileName +
".jpg"
,
null
);
}
});
setContentView(R.layout.camera_shootingbtn);
RelativeLayout rl = (RelativeLayout) findViewById(R.id.carem_shooting_btn_RL);
mPreview =
new
Preview(
this
);
rl.addView(mPreview);
Button shootingbtn =
new
Button(
this
);
Button scannerbtn =
new
Button(
this
);
shootingbtn.setText(
" 촬영 "
);
scannerbtn.setText(
"스캐너"
);
RelativeLayout.LayoutParams params =
new
RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
RelativeLayout.LayoutParams params2 =
new
RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params2.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
scannerbtn.setLayoutParams(params2);
params2.addRule(RelativeLayout.CENTER_VERTICAL);
scannerbtn.setLayoutParams(params2);
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
shootingbtn.setLayoutParams(params);
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
shootingbtn.setLayoutParams(params);
rl.addView(scannerbtn);
rl.addView(shootingbtn);
shootingbtn.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
CameraActivity.mCamera
.takePicture(
null
,
null
, mPictureCallback);
}
});
mdraw =
new
Boxdraw(
this
);
addContentView(mdraw,
new
LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
}
public
void
androidCrop(Uri arg1){
i =
new
Intent(
"com.android.camera.action.CROP"
);
i.setDataAndType(arg1,
"image/*"
);
i.putExtra(
"outputX"
,
200
);
i.putExtra(
"outputY"
,
200
);
i.putExtra(
"aspectX"
,
2
);
i.putExtra(
"aspectY"
,
1
);
i.putExtra(
"scale"
,
true
);
i.putExtra(
"return-data"
,
true
);
startActivityForResult(i,
1
);
Log.d(
null
,
"던졌다"
);
}
@Override
protected
void
onActivityResult(
int
requestCode,
int
resultCode, Intent data) {
super
.onActivityResult(requestCode, resultCode, data);
if
(resultCode != RESULT_OK){
return
;
}
switch
(requestCode) {
case
1
:
{
Log.d(
null
,
"받았다"
);
final
Bundle extras = data.getExtras();
path = getExternalFilesDir(
null
).getAbsoluteFile()+
"/"
+fileName+
".jpg"
;
if
(extras!=
null
){
Bitmap photo = extras.getParcelable(
"data"
);
storeCropImage(photo, path);
}
}
break
;
}
}
private
void
storeCropImage(Bitmap bitmap, String path) {
File copyFile =
new
File(path);
BufferedOutputStream out =
null
;
try
{
copyFile.createNewFile();
out =
new
BufferedOutputStream(
new
FileOutputStream(copyFile));
bitmap.compress(CompressFormat.JPEG,
100
, out);
out.flush();
out.close();
}
catch
(Exception e) {
e.printStackTrace();
}
}
@Override
protected
void
onPause() {
finish();
super
.onPause();
}
PictureCallback mPictureCallback =
new
PictureCallback() {
@Override
public
void
onPictureTaken(
byte
[] arg0, Camera arg1) {
File sdpath = getExternalFilesDir(
null
);
fileName = realtime();
File file =
new
File(sdpath.getAbsoluteFile() +
"/"
+ fileName
+
".jpg"
);
FileOutputStream out;
try
{
out =
new
FileOutputStream(file);
out.write(arg0);
out.flush();
if
(!mediaScannerConnection.isConnected()) {
mediaScannerConnection.connect();
Log.d(
"aa"
,
"연결됨"
);
}
out.close();
}
catch
(IOException e) {
Toast.makeText(CameraActivity.
this
,
"왜 저장이 안될가?"
, Toast.LENGTH_SHORT)
.show();
}
CameraActivity.mCamera.startPreview();
}
};
private
String realtime() {
SimpleDateFormat mSimpleDateFormat =
new
SimpleDateFormat(
"yyyy.MM.dd HH:mm:ss"
, Locale.KOREA);
Date currentTime =
new
Date();
String mTime = mSimpleDateFormat.format(currentTime);
return
mTime;
}
}
class
Preview
extends
SurfaceView
implements
SurfaceHolder.Callback {
SurfaceHolder mHolder;
Preview(Context context) {
super
(context);
mHolder = getHolder();
mHolder.addCallback(
this
);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public
void
surfaceCreated(SurfaceHolder holder) {
CameraActivity.mCamera = Camera.open();
try
{
CameraActivity.mCamera.setPreviewDisplay(holder);
}
catch
(IOException exception) {
CameraActivity.mCamera.release();
CameraActivity.mCamera =
null
;
}
}
public
void
surfaceDestroyed(SurfaceHolder holder) {
CameraActivity.mCamera.stopPreview();
CameraActivity.mCamera.release();
CameraActivity.mCamera =
null
;
}
public
void
surfaceChanged(SurfaceHolder holder,
int
format,
int
w,
int
h) {
Camera.Parameters parameters = CameraActivity.mCamera.getParameters();
parameters.setPreviewSize(CameraActivity.width, CameraActivity.height);
CameraActivity.mCamera.setParameters(parameters);
CameraActivity.mCamera.startPreview();
}
public
Camera.AutoFocusCallback cameraAutoCallback =
new
AutoFocusCallback() {
@Override
public
void
onAutoFocus(
boolean
success, Camera camera) {
if
(
true
== success) {
CameraActivity.paint.setColor(Color.rgb(
47
,
237
,
40
));
Log.d(
"success"
,
""
+ success);
}
else
{
Log.d(
"success"
,
""
+ success);
}
}
};
public
boolean
onTouchEvent(android.view.MotionEvent event) {
CameraActivity.mCamera.autoFocus(cameraAutoCallback);
return
true
;
};
}
}