میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

توابع کتابخانه دوربین در اندروید

امروزه اغلب دستگاه های اندرویدی حداقل یک دوربین را دارند و برخی نیز یک دوربین در جلو و یک دوربین در عقب دستگاه دارند.

جهت استفاده از امکان سخت افزاری camera دستگاه اندرویدی، کافی است از اپلیکیشن آماده ی camera استفاده نمایید. بدین معنی که توسعه دهنده به واسطه ی یک آبجکت intent اپلیکیشن آماده ی Camera را اجرا کرده و سپس با خواندن داده های بازگشتی اپلیکیشن به نتیجه دست پیدا می کند.

روش دیگری که می توان مورد استفاده قرار داد، این است که camera یا امکان سخت افزاری دوربین را با فراخوانی توابع کتابخانه ای Camera API مستقیما در بطن پروژه جاسازی نمایید.

مبحث زیر مثال های کاربردی درباره ی پیاده سازی هر دو روش ارائه می دهد.

 


 اجرای اپلیکیشن Camera و گرفتن یک عکس با فراخوانی آبجکت Intent

یک پروژه و activity جدید به ترتیب به نام های de.vogella.android.imagepick و ImagePickActivity ایجاد نمایید.

یک المان ImageView که مقدار ID آن بر روی result تنظیم شده در لایه ی XML اپلیکیشن (فایل layout)، ایجاد نمایید. سپس یک المان button با ویژگی (property) onClick که به متد متناظر onClick در کلاس activity اشاره دارد، در این فایل اضافه نمایید.

حال کلاس ImagePickActivity را به صورت زیر ویرایش نمایید.

 

package de.vogella.android.imagepick;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
public class ImagePickActivity extends Activity {
        private static final int REQUEST_CODE = 1;
        private Bitmap bitmap;
        private ImageView imageView;
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                imageView = (ImageView) findViewById(R.id.result);
        }
        public void onClick(View View) {
                Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                startActivityForResult(intent, REQUEST_CODE);
        }
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                InputStream stream = null;
                if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK)
                        try {
                                // recyle unused bitmaps
                                if (bitmap != null) {
                                        bitmap.recycle();
                                }
                                stream = getContentResolver().openInputStream(data.getData());
                                bitmap = BitmapFactory.decodeStream(stream);
                                imageView.setImageBitmap(bitmap);
                        } catch (FileNotFoundException e) {
                                e.printStackTrace();
                        } finally ch (IOException e) {
                                e{
                                if (stream != null)
                                        try {
                                                stream.close();
                                        } catch (IOException e) {
                                                e.printStackTrace();
                                        }
                        }
        }
}

 

 


پیاده سازی توابع کتابخانه ای Camera API

در تمرین جاری، یک اپلیکیشن طراحی می کنید که به کاربر امکان می دهد با استفاده از دوربین جلوی دستگاه عکس تهیه کرده و بعد آن را بر روی حافظه ی خارجی (SD) دخیره نماید.

توجه : در صورت استفاده از نرم افزار شبیه ساز محیط اندروید (Android emulator)، لازم است امکان سخت افزاری camera را تنظیم کرده و یک حافظه ی خارجی (SD card) به هنگام ایجاد دستگاه مجازی اندروید تعریف کرده باشید.

یک پروژه ی اندروید و activity جدید به ترتیب به نام های de.vogella.camera.api و MakePhotoActivity ایجاد نمایید.

لازم است مجوز android.permission.CAMERA را برای دسترسی به امکان سخت افزاری دوربین و android.permission.WRITE_EXTERNAL_STORAGE برای ذخیره ی اطلاعات بر روی حافظه ی خارجی به فایل AndroidManifest.xml اضافه نمایید.

 

<!--?xml version="1.0" encoding="utf-8" ?-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="de.vogella.cameara.api" android:versioncode="1" android:versionname="1.0">
<uses-sdk android:minsdkversion="15">
<uses-permission android:name="android.permission.CAMERA">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name">
<activity android:name="de.vogella.camera.api.MakePhotoActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN">
<category android:name="android.intent.category.LAUNCHER">
            </category></action></intent-filter>
        </activity>
    </application>
</uses-permission></uses-permission></uses-sdk></manifest>

 

فایل main.xml مقیم در پوشه ی res/layout_ را به صورت زیر ویرایش نمایید.

<!--?xml version="1.0" encoding="utf-8" ?-->
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">
<button android:id="@+id/captureFront" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerinparent="true" android:onclick="onClick" android:text="Make Photo">
 
</button></relativelayout>

یک کلاس به نام PhotoHandler را به صورت زیر اعلان و پیاده سازی کنید که وظیفه ی آن جایگذاری فایل تصویری تهیه شده در حافظه ی خارجی (SD card) می باشد.

 

package de.vogella.camera.api;
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.content.Context;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;
public class PhotoHandler implements PictureCallback {
        private final Context context;
        public PhotoHandler(Context context) {
                this.context = context;
        }
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
                File pictureFileDir = getDir();
                if (!pictureFileDir.exists() && !pictureFileDir.mkdirs()) {
                        Log.d(MakePhotoActivity.DEBUG_TAG, "Can't create directory to save image.");
                        Toast.makeText(context, "Can't create directory to save image.",
                                        Toast.LENGTH_LONG).show();
                        return;
                }
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyymmddhhmmss");
                String date = dateFormat.format(new Date());
                String photoFile = "Picture_" + date + ".jpg";
                String filename = pictureFileDir.getPath() + File.separator + photoFile;
                File pictureFile = new File(filename);
                try {
                        FileOutputStream fos = new FileOutputStream(pictureFile);
                        fos.write(data);
                        fos.close();
                        Toast.makeText(context, "New Image saved:" + photoFile,
                                        Toast.LENGTH_LONG).show();
                } catch (Exception error) {
                        Log.d(MakePhotoActivity.DEBUG_TAG, "File" + filename + "not saved: "
                                        + error.getMessage());
                        Toast.makeText(context, "Image could not be saved.",
                                        Toast.LENGTH_LONG).show();
                }
        }
        private File getDir() {
                File sdDir = Environment
                  .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
                return new File(sdDir, "CameraAPIDemo");
        }
}

 

محتوای کلاس MakePhotoActivity را به صورت زیر ویرایش نمایید. این کلاس فرض را بر این می گذارد که شما یک المان button متناظر در لایه ی xml، فایل layout خود تعریف کرده اید که ویژگی onClick آن به متد onClick() در کلاس activity اشاره می کند.

 

 

package de.vogella.camera.api;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import de.vogella.cameara.api.R;
public class MakePhotoActivity extends Activity {
        private final static String DEBUG_TAG = "MakePhotoActivity";
        private Camera camera;
        private int cameraId = 0;
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                // do we have a camera?
                if (!getPackageManager()
                                .hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
                        Toast.makeText(this, "No camera on this device", Toast.LENGTH_LONG)
                                        .show();
                } else {
                        cameraId = findFrontFacingCamera();
                        if (cameraId < 0) {
                                Toast.makeText(this, "No front facing camera found.",
                                                Toast.LENGTH_LONG).show();
                        } else {
                                camera = Camera.open(cameraId);
                        }
                }
        }
        public void onClick(View view) {
                camera.startPreview();
                camera.takePicture(null, null,
                                new PhotoHandler(getApplicationContext()));
        }
        private int findFrontFacingCamera() {
                int cameraId = -1;
                // Search for the front facing camera
                int numberOfCameras = Camera.getNumberOfCameras();
                for (int i = 0; i < numberOfCameras; i++) {
                        CameraInfo info = new CameraInfo();
                        Camera.getCameraInfo(i, info);
                        if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
                                Log.d(DEBUG_TAG, "Camera found");
                                cameraId = i;
                                break;
                        }
                }
                return cameraId;
        }
        @Override
        protected void onPause() {
                if (camera != null) {
                        camera.release();
                        camera = null;
                }
                super.onPause();
        }
}

 


امیدواریم آموزش توابع کتابخانه دوربین در اندروید نیز برای شما مفید واقع شده باشد و ادامه آموزش برنامه نویسی اندروید رو دنبال کنید . برای مطالعه پست‌ها بیشتر ، ما را در مدرسه کدنویسی تلگرام  و یا در تی جوان اینستاگرام دنبال کنید.

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.
ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟