-
自動對焦設(shè)置查看全部
-
隱式調(diào)用startActivity(new Intent(MediaStore.ACTION_IMAGE_CAPTURE)),開啟相機 使應(yīng)用具有相機功能加上過濾器<activity....> <intent-filter> <action android:name="android.intent.action.IMAGE_CAPTURE"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>查看全部
-
調(diào)用系統(tǒng)相機流程查看全部
-
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); Uri uri = Uri.fromFile(new File(pathFile)); //將Uri指向創(chuàng)建的文件對象 intent.putExtra(MediaStore.EXTRA_OUTPUT,uri); //更改拍照文件存儲路徑 startActivityForResult(intent, CAREMA_REQUEST_CODE_2);查看全部
-
自定義相機步驟:見截圖查看全部
-
添加相機水印小功能 只需要在預覽界面的layout布局中添加一個textview就行,同理也可以加入其它任何形式的控件,比如imageview等等 注意:點擊拍照后,textview信息并不會默認保存到照片信息中去查看全部
-
五、自定義camera總結(jié): 1)建立camera對象 2)建立SurfaceView對象 3)將camera對象和SurfaceView對象進行綁定 在CustomCamera核心類中主要做了三件事 1)創(chuàng)建了camera的生命周期方法 在getCamera(){}中獲取camera對象,并做初始化操作 Camera.open(); 在setStartPreview方法中將camera對象和surfaceView綁定,讓camera開始進行取景工作,預覽顯示畫面 在releaseCamera()方法中釋放camera所占用的系統(tǒng)資源,同時解除camera和surfaceview 2)在activity生命周期方法中對camera進行管理 在onResume方法中獲取camera對象,調(diào)用setStartPreview方法 在onPause方法中調(diào)用releaseCamera()方法 在surfaceView的三個方法中分別對相機生命周期進行管理 3)真正拍照方法startCapture 參數(shù)設(shè)置,同時在拍照的過程中將拍照的照片信息保存到臨時文件中,展示在另外一個activity里 細節(jié)優(yōu)化: 1)相機預覽過程中并沒有自動對焦,只有在點擊拍照按鈕之后,才會parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); //設(shè)置對焦模式:自動對焦 優(yōu)化方法:點擊屏幕,實現(xiàn)自動對焦 實現(xiàn):給surfaceview添加點擊事件 mPreview.setOnClickListener(this); @Override public void onClick(View v) { mCamera.autoFocus(null);//不需要返回任何結(jié)果,只是預覽界面 }查看全部
-
實現(xiàn)ResultActivity 布局:textview + imageview ResultActivity onCreate方法,如截圖 String path = getIntent().getStringExtra("picPath"); ImageView imageView = (ImageView)findViewById(R.id.pic); FileInputStream fis = new FileInputStream(path); //獲取文件輸入流 Bitmap bitmap = BitmapFatory.decodeStream(fis); //獲取bitmap Matrix matrix = new Matrix(); matrix.setRotate(90); //變換矩陣,旋轉(zhuǎn)90度 bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(),matrix, true); //將圖片旋轉(zhuǎn)90度 imageView.setImageBitmap(bitmap);查看全部
-
接12) mPictureCallback定義如下: private Camera.PictureCallback mPictureCallback = new Camera.PictureCallback(){ @Override public void onPictureTaken(byte[] data, Camera camera){ //data數(shù)據(jù)需要保存到指定路徑下的臨時文件中 File tempFile = new File("/sdcard/temp.png"); FileOutputStream fos = new FileOutputStream(tempFile); fos.write(data); fos.close(); //將圖片顯示到ResultActivity的imageview中 Intent intent = new Intent(CustomCamera.this, ResultActivity.class); intent.putExtra("picPath",tempFile.getAbsolutePath()); startActivity(intent); CustomCamera.this.finish(); } }查看全部
-
12)實現(xiàn)點擊拍照功能 a、拍照參數(shù)調(diào)整 Camera.Parameters parameters = mCamera.getParameters();//獲取參數(shù) parameters.setPictureFormat(ImageFormat.JPEG);//設(shè)置圖片格式 parameters.setPreviewSize(800,400); //設(shè)置圖片大小 parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);//設(shè)置對焦模式 自動對焦 //對焦完全清晰后再拍照,所以使用一個回調(diào)函數(shù),當對焦成功后再拍 mCamera.autoFocus(new Camera.AutoFocusCallback(){ @Override public void onAutoFocus(boolean success, Camera camera){ if(success){ //對焦完成 mCamera.takePicture(null,null, mPictureCallback); } } });查看全部
-
接四 9)在onResume()中調(diào)用setStartPreview完成綁定 @Override protected void onResume() { super.onResume(); if (mCamera == null){ mCamera = getCamera(); if(mHolder != null){ setStartPreview(mCamera, mHolder); } } } 10)在releaseCamera()方法中,也需要釋放SurfaceHolder資源 /** * 釋放相機所占用的資源 * */ private void releaseCamera(){ if(mCamera != null){ mCamera.setPreviewCallback(null); //將相機回調(diào)置空,取消surfaceview和camera的關(guān)聯(lián) mCamera.stopPreview(); //取消相機的取景功能 mCamera.release(); //釋放相機占用資源 mCamera = null; } } 11)實現(xiàn)SurfaceHolder的三個方法 @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(); }查看全部
-
接 四、4) 5)獲取camera對象 public Camera getCamera(){ Camera camera = Camera.open(); return camera; } 6)釋放相機資源 private void releaseCamera(){ mCamera.release(); } 7)將Camera與Activity的生命周期綁定 Activity onPause的時候,釋放camera資源 Activity onResume的時候,初始化camera對象 8)下一步將camera和界面的顯示進行綁定,即讓界面上可以實時顯示預覽效果,并最終完成拍照功能 private SurfaceView mPreview; //顯示相機取景圖片 使用SurfaceView,需要implements SurfaceHolder.Callback方法,并重寫其中的三個方法; 使用SurfaceView之前,還需要創(chuàng)建SurfaceHolder對象: SurfaceHolder mHolder = mPreview.getHolder(); mHolder.addCallback(this); //將camera對象和surfaceView綁定,讓界面上可以實時顯示預覽效果 private void setStartPreview(Camera camera, SurfaceHolder holder){ camera.setPreviewDisplay(holder);//完成綁定 camera.setDisplayOrientation(90); //將系統(tǒng)camera預覽角度進行調(diào)整 camera.startPreview();//在surfaceview中去預覽camera中的圖像 } 注意:系統(tǒng)默認camera是橫屏的,所以預覽圖像也是橫屏,因此我們需要增加一個方法,讓整個camera能夠豎過來 camera.setDisplayOrientation(90); //將camera旋轉(zhuǎn)90度,從橫屏變成豎屏查看全部
-
四、自定義Camera Camera使用注意事項: 1)相機使用結(jié)束后要及時釋放其占用的資源,將camera和activity的生命周期綁定 2)Camera所在包是android.hardware.Camera;Camera2是更高級的Camera 3)增加自定義Camera類,CustomCamera extends Activity 4)布局:一個button,點擊時進行拍照 一個SurfaceView,顯示相機取景圖片 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Capture" android:onClick="startCapture"/> <SurfaceView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/sv_preview"/> </LinearLayout>查看全部
-
獲取Camera對象 見截圖查看全部
-
調(diào)用系統(tǒng)Camera知識點回顧: 如何打開攝像頭, 1、通過intent隱式調(diào)用的方法,intent里面的參數(shù)是MediaStore.ACTION_IMAGE_CAPTURE 2、在Manifest文件中的activity中添加一個新的action 屬性為android.media.action.IMAGE_CAPTURE 新增加一個category name為android.intent.category.DEFAULT查看全部
舉報
0/150
提交
取消