1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      android中怎么通過自定義Camera實現(xiàn)拍照

      android中怎么通過自定義Camera實現(xiàn)拍照,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

      成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),枝江企業(yè)網(wǎng)站建設(shè),枝江品牌網(wǎng)站建設(shè),網(wǎng)站定制,枝江網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,枝江網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

      1、打開相機

      a.預(yù)覽拍攝圖片,需用到SurfaceView,并且實現(xiàn)其回調(diào)函數(shù)implements SurfaceHolder.Callback;
      activity_camera.xml

      
      
      
        
      
        

      2、獲取相機并開啟預(yù)覽

      /**
         * 獲取系統(tǒng)相機
         * 
         * @return
         */
        private Camera getcCamera() {
          Camera camera = null;
          try {
            camera = Camera.open();
          } catch (Exception e) {
            camera = null;
          }
          return camera;
        }
      /**
         * 顯示相機預(yù)覽圖片
         * 
         * @return
         */
        private void showCameraView(Camera camera,SurfaceHolder holder)
        {
          try {
            camera.setPreviewDisplay(holder);
            camera.setDisplayOrientation(90);
            camera.startPreview();
          }catch (Exception e){
            e.printStackTrace();
          };
      
        }
      /**
      ** 實現(xiàn)界面回調(diào)處理
      */
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
          showCameraView(mCamera, holder);
        }
      
        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
          mCamera.stopPreview();
          showCameraView(mCamera, holder);
        }
      
        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
          clearCamera();
        }
      }

      3、相機主頁面處理

      public class CameraActivity extends AppCompatActivity implements SurfaceHolder.Callback{
      
        private SurfaceView sv;
        private Camera mCamera;
        private SurfaceHolder holder;
      
        @Override
        protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_camera);
          sv = (SurfaceView)findViewById(R.id.sv);
          holder = sv.getHolder();
          holder.addCallback(this);
      
          findViewById(R.id.btn_camera).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              // 獲取當(dāng)前相機參數(shù)
              Camera.Parameters parameters = mCamera.getParameters();
              // 設(shè)置相片格式
              parameters.setPictureFormat(ImageFormat.JPEG);
              // 設(shè)置預(yù)覽大小
              parameters.setPreviewSize(800, 480);
              // 設(shè)置對焦方式,這里設(shè)置自動對焦
              parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
              mCamera.autoFocus(new Camera.AutoFocusCallback() {
      
                @Override
                public void onAutoFocus(boolean success, Camera camera) {
                  // 判斷是否對焦成功
                  if (success) {
                    // 拍照 第三個參數(shù)為拍照回調(diào)
                    mCamera.takePicture(null, null, new Camera.PictureCallback() {
                      @Override
                      public void onPictureTaken(byte[] data, Camera camera) {
                        // data為完整數(shù)據(jù)
                        File file = new File("/sdcard/photo.png");
                        // 使用流進行讀寫
                        try {
                          FileOutputStream fos = new FileOutputStream(file);
                          try {
                            fos.write(data);
                            // 關(guān)閉流
                            fos.close();
                            // 查看圖片
                            Intent intent = new Intent();
                            // 傳遞路徑
                            intent.putExtra("path", file.getAbsolutePath());
                            setResult(0,intent);
                            finish();
                          } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                          }
                        } catch (FileNotFoundException e) {
                          // TODO Auto-generated catch block
                          e.printStackTrace();
                        }
                      }
                    });
                  }
                }
              });
            }
          });
      
        }
       @Override
        protected void onResume() {
          super.onResume();
          if (mCamera == null) {
            mCamera = getCamera();
            if (holder != null) {
              showCameraView(mCamera, holder);
            }
          }
        }
        @Override
        protected void onPause() {
          // TODO Auto-generated method stub
          super.onPause();
          // activity暫停時我們釋放相機內(nèi)存
          clearCamera();
      
        }
        @Override
        protected void onDestroy() {
          super.onDestroy();
        }
      
        /**
         * 釋放相機的內(nèi)存
         */
        private void clearCamera() {
      
          // 釋放hold資源
          if (mCamera != null) {
            // 停止預(yù)覽
            mCamera.stopPreview();
            mCamera.setPreviewCallback(null);
            // 釋放相機資源
            mCamera.release();
            mCamera = null;
          }
        }

      4、啟動activity(設(shè)置拍照完圖片路徑返回顯示圖片處理,一定要對圖片進行采樣率操作(很可能拍照的圖片太多而無法顯示,又不報任何異常))

      public class MainActivity extends AppCompatActivity {
      
        private ImageView cameraIv;
      
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          if(resultCode == 0 && requestCode == 100)
          {
            String path = data.getStringExtra("path");
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeFile(path, options);
            ImageSize imageSize = getImageViewSize(cameraIv);
            options.inSampleSize = caculateInSampleSize(options,
                imageSize.width, imageSize.height);
      
            // 使用獲得到的InSampleSize再次解析圖片
            options.inJustDecodeBounds = false;
            Bitmap bitmap = BitmapFactory.decodeFile(path, options);
            cameraIv.setImageBitmap(bitmap);
          }
      
          super.onActivityResult(requestCode, resultCode, data);
        }
      
        @Override
        protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
      
          Button openButton = (Button) findViewById(R.id.button);
          cameraIv = (ImageView) findViewById(R.id.imageView);
      
      
      
          openButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              Intent intent = new Intent(MainActivity.this,CameraActivity.class);
              startActivityForResult(intent,100);
            }
          });
        }
      
         /* 根據(jù)需求的寬和高以及圖片實際的寬和高計算SampleSize
         *
             * @param options
         * @param width
         * @param height
         * @return
             */
        public static int caculateInSampleSize(BitmapFactory.Options options, int reqWidth,
                            int reqHeight)
        {
          int width = options.outWidth;
          int height = options.outHeight;
      
          int inSampleSize = 1;
      
          if (width > reqWidth || height > reqHeight)
          {
            int widthRadio = Math.round(width * 1.0f / reqWidth);
            int heightRadio = Math.round(height * 1.0f / reqHeight);
      
            inSampleSize = Math.max(widthRadio, heightRadio);
          }
      
          return inSampleSize;
        }
      
        public static ImageSize getImageViewSize(ImageView imageView)
        {
      
          ImageSize imageSize = new ImageSize();
          DisplayMetrics displayMetrics = imageView.getContext().getResources()
              .getDisplayMetrics();
      
          LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams)imageView.getLayoutParams();
      
          int width = imageView.getWidth();// 獲取imageview的實際寬度
          if (width <= 0)
          {
            width = lp.width;// 獲取imageview在layout中聲明的寬度
          }
      
          if (width <= 0)
          {
            width = displayMetrics.widthPixels;
          }
      
          int height = imageView.getHeight();// 獲取imageview的實際高度
          if (height <= 0)
          {
            height = lp.height;// 獲取imageview在layout中聲明的寬度
          }
      
          if (height <= 0)
          {
            height = displayMetrics.heightPixels;
          }
          imageSize.width = width;
          imageSize.height = height;
      
          return imageSize;
        }
      
        public static class ImageSize
        {
          int width;
          int height;
        }
      }

      看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。


      文章標題:android中怎么通過自定義Camera實現(xiàn)拍照
      標題鏈接:http://ef60e0e.cn/article/pogioe.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        工布江达县| 米脂县| 龙川县| 承德县| 东辽县| 托克托县| 登封市| 罗田县| 静宁县| 无为县| 肇州县| 和林格尔县| 镇赉县| 平武县| 阜新市| 三都| 嘉黎县| 丹巴县| 彭阳县| 唐山市| 汝城县| 湘西| 洛隆县| 安龙县| 通渭县| 黄大仙区| 寿光市| 旅游| 洛扎县| 东乌珠穆沁旗| 德惠市| 鹿邑县| 张北县| 博罗县| 禹城市| 新闻| 靖边县| 青岛市| 汶上县| 荥经县| 宝兴县|