Android相機(jī)Camera基礎(chǔ)知識(shí)
一、概述
本章節(jié)主要講述的Android相機(jī)Camera的相關(guān)知識(shí)點(diǎn),主要包含三個(gè)方面,Android啟動(dòng)系統(tǒng)相機(jī)生成縮略圖、Android啟動(dòng)系統(tǒng)相機(jī)生成原圖以及Android自定義相機(jī)等。
二、Android啟動(dòng)系統(tǒng)相機(jī)
核心代碼:
package com.czhappy.camerademo.activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import com.czhappy.camerademo.R;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private static int REQ_1 = 1;
private static int REQ_2 = 2;
private ImageView image_iv;
private String mFilePath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image_iv = (ImageView) findViewById(R.id.image_iv);
mFilePath = Environment.getExternalStorageDirectory().getPath();
mFilePath = mFilePath +"/" + System.currentTimeMillis()+".jpg";
}
public void startCamera1(View view){
//隱式Intent調(diào)用
Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(it, REQ_1);
}
public void startCamera2(View view){
//隱式Intent調(diào)用
Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Uri photoUri = Uri.fromFile(new File(mFilePath));
it.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(it, REQ_2);
}
public void customCamera(View view){
Intent it = new Intent(MainActivity.this, CustomCameraActivity.class);
startActivity(it);
}
/**
*
* @param requestCode
* @param resultCode
* @param data //縮略圖
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
if(requestCode == REQ_1){//縮略圖
Bundle bundle = data.getExtras();
Bitmap bmp = (Bitmap) bundle.get("data");
image_iv.setImageBitmap(bmp);
}else if(requestCode == REQ_2){//原圖
FileInputStream fis = null;
try {
fis = new FileInputStream(mFilePath);
Bitmap bitmap = BitmapFactory.decodeStream(fis);
image_iv.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
三、Android自定義相機(jī)
1.自定義相機(jī)步驟:
創(chuàng)建相機(jī)
創(chuàng)建SurfaceView
關(guān)聯(lián)相機(jī)與SurfaceView
調(diào)整相機(jī)顯示效果
自定義相機(jī)預(yù)覽界面
2.核心代碼:
自定義相機(jī)CustomCameraActivity.java
package com.czhappy.camerademo.activity;
import android.content.Intent;
import android.graphics.ImageFormat;
import android.hardware.Camera;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import com.czhappy.camerademo.R;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* Description:
* User: chenzheng
* Date: 2016/12/27 0027
* Time: 13:43
*/
public class CustomCameraActivity extends AppCompatActivity implements SurfaceHolder.Callback{
private SurfaceView mPreview;
private Camera mCamera;
private SurfaceHolder mHolder;
private Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File tempFile = new File("/sdcard/temp.png");
try {
FileOutputStream fos = new FileOutputStream(tempFile);
fos.write(data);
fos.close();
Intent it = new Intent(CustomCameraActivity.this, CaptureResultActivity.class);
it.putExtra("picPath", tempFile.getAbsolutePath());
startActivity(it);
finish();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_custom_camera);
mPreview = (SurfaceView) this.findViewById(R.id.preview);
mHolder = mPreview.getHolder();
mHolder.addCallback(this);
//點(diǎn)擊自動(dòng)對(duì)焦
mPreview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCamera.autoFocus(null);;
}
});
}
/**
* 拍照
* @param view
*/
public void capture(View view){
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPictureFormat(ImageFormat.JPEG);
parameters.setPictureSize(800,400);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);//自動(dòng)對(duì)焦
mCamera.autoFocus(new Camera.AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
//對(duì)焦準(zhǔn)確拍攝照片
if(success){
mCamera.takePicture(null, null, mPictureCallback);
}
}
});
}
/**
* 獲取相機(jī)對(duì)象
* @return
*/
private Camera getCamera(){
mCamera = Camera.open();
return mCamera;
}
/**
* 開始預(yù)覽相機(jī)內(nèi)容
*/
private void setStartPreview(Camera camera, SurfaceHolder holder){
try {
camera.setPreviewDisplay(holder);
camera.setDisplayOrientation(90);//設(shè)置相機(jī)預(yù)覽為豎屏90度
camera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 釋放相機(jī)資源
*/
private void releaseCamera(){
if(mCamera!=null){
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
}
@Override
protected void onResume() {
super.onResume();
if (mCamera==null){
mCamera = getCamera();
if(mHolder!=null){
setStartPreview(mCamera, mHolder);
}
}
}
@Override
protected void onPause() {
super.onPause();
releaseCamera();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
setStartPreview(mCamera, mHolder);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
mCamera.stopPreview();
setStartPreview(mCamera, mHolder);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
releaseCamera();
}
}
生成圖片結(jié)果頁面CaptureResultActivity.java
package com.czhappy.camerademo.activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import com.czhappy.camerademo.R;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
/**
* Description:
* User: chenzheng
* Date: 2016/12/30 0030
* Time: 13:27
*/
public class CaptureResultActivity extends AppCompatActivity {
private String picPath;
private ImageView result_iv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_capture_result);
picPath = getIntent().getStringExtra("picPath");
result_iv = (ImageView) findViewById(R.id.result_iv);
try {
FileInputStream fis = new FileInputStream(picPath);
Bitmap bitmap = BitmapFactory.decodeStream(fis);
Matrix matrix = new Matrix();
matrix.setRotate(90);//旋轉(zhuǎn)90度矩陣
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
result_iv.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
四、項(xiàng)目源代碼下載
http://xiazai.jb51.net/201701/yuanma/AndroidCamera(jb51.net).rar
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
IOS開發(fā)向右滑動(dòng)返回前一個(gè)頁面功能(demo)
本文給大家介紹使用android實(shí)現(xiàn)向右滑動(dòng)返回一個(gè)頁面的功能,大家都知道在ios7中,蘋果的原生態(tài)應(yīng)用幾乎都能夠通過向右滑動(dòng)來返回到前一個(gè)頁面,這樣可以避免用戶在單手操作時(shí)用大拇指去點(diǎn)擊那個(gè)遙遠(yuǎn)的返回鍵,下面小編就給帶來了實(shí)現(xiàn)代碼,有需要的朋友可以參考下2016-06-06
android自定義組件實(shí)現(xiàn)儀表計(jì)數(shù)盤
這篇文章主要為大家詳細(xì)介紹了android自定義組件實(shí)現(xiàn)儀表計(jì)數(shù)盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11
android仿音悅臺(tái)頁面交互效果實(shí)例代碼
這篇文章主要介紹了android 仿音悅臺(tái)頁面播放效果實(shí)例代碼,新版的音悅臺(tái) APP 播放頁面交互非常有意思,可以把播放器往下拖動(dòng),然后在底部懸浮一個(gè)小框,還可以左右拖動(dòng)。2017-01-01
Android用Scroller實(shí)現(xiàn)一個(gè)可向上滑動(dòng)的底部導(dǎo)航欄
本篇文章主要介紹了Android用Scroller實(shí)現(xiàn)一個(gè)可上滑的底部導(dǎo)航欄,具有一定的參考價(jià)值,有興趣的小伙伴們可以參考一下2017-07-07
Android手機(jī)衛(wèi)士之確認(rèn)密碼對(duì)話框
這篇文章主要為大家詳細(xì)介紹了Android手機(jī)衛(wèi)士之確認(rèn)密碼對(duì)話框,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
Android實(shí)現(xiàn)簡(jiǎn)單圖庫(kù)輔助器
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)簡(jiǎn)單圖庫(kù)輔助器的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
Android插件化-RePlugin項(xiàng)目集成與使用詳解
這篇文章主要介紹了Android插件化-RePlugin項(xiàng)目集成與使用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11

