مشخصات مقاله
-
1976
-
0.0
-
5301
-
0
-
0
آموزش کار با دوربین در اندروید : Android Camera Tutorial
آموزش دوربین اندروید
دو راه برای استفاده از دوربین در برنامه ی شما وجود داردکه آن دو راه عبارتند از
- استفاده از برنامه ی دوربین اندروید موجود در برنامه ی خود .
- استفاده مستقیم از دوربین API در اندروید که در برنامه ی شما ارائه شده است.
استفاده از دوربین اندروید موجود در برنامه
شما برای آغاز برنامه ی نصب شده ی دور بین روی گوشی خود از MediaStore.ACTION_IMAGE_CAPTURE استفاده می کنید، که ترکیب آن به شکل زیر می باشد.
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
علاوه بر مورد بالا Intent های دیگری وجود دارند که توسط MediaStore ارائه می شوند که در زیر لیست شده اند.
اکنون شما از عملکرد startActivityForResult() برای آغاز این فعالیت استفاده کرده و منتظر نتیجه می مانید. ترکیب آن در زیر ارائه شده است.
startActivityForResult(intent,0)
این روش در گروه Activity تعریف شده است، که آن را از فعالیت اصلی فرا می خوانیم. روش های تعریف شده ای در گروه Activity وجود دارند که همین کار را انجام می دهند اما زمانی استفاده می شوند که نه از گروه activity بلکه از جایی دیگر فراخوانده اید. می توانید لیست آنها را در زیر ببینید.
مهم نیست از کدام عملکرد برای آغاز فعالیت استفاده می کنید، همه ی آنها نتیجه را بازمی گردانند. نتیجه می تواند با تحت الشعاع قراردادن عملکرد onActivityResult به دست آید.
مثال:در اینجا مثالی را می بینید که نشان می دهد چگونه برنامه ی دوربین موجود را برای گرفتن عکس آغاز کنید و نتیجه را به شکل bitmap نمایش می دهد.
برای اجرای این مثال به دستگاهی نیاز دارید که در آن دوربین ساپورت می شود.
در زیر محتوای تغییر یافته ی فعالیت اصلی را مشاهده می کنید.
src/com.example.camera/MainActivity.java.
package com.example.camera;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
public class MainActivity extends Activity {
ImageView imgFavorite;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgFavorite = (ImageView)findViewById(R.id.imageView1);
imgFavorite.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
open();
}
});
}
public void open(){
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
Bitmap bp = (Bitmap) data.getExtras().get("data");
imgFavorite.setImageBitmap(bp);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
در زیر محتوای res/layout/activity_main.xml file را خواهید دید.
در زیر محتوای res/values/strings.xml را برای تعریف یک مقدار ثابت مشاهده می کنید.
Camera Settings Hello world! Tap the image to open the camera!!
در زیر محتوای پیش فرض AndroidManifest.xml را می بینید.
اجازه بدهید برنامه ی Camera را اجرا کنیم. فرض می کنیم که دستگاه موبایل اندروید خود را به کامپیوتر متصل کرده اید. برای اجرای برنامه از Eclipse، یکی ازفایل های فعالیت پروژه را باز کرده و روی آیکن Run از تولبار کلیک کنید. قبل از شروع برنامه ی شما، Eclipse پنجره ی زیر را برای انتخاب گزینه ی محل اجرای برنامه ی اندرویدتان، نمایش خواهد داد.
دستگاه موبایل خود را به عنوان یک گزینه انتخاب کنید و سپس آن را چک کنید که صفحه ی زیر را نمایش خواهد داد.
اکنون روی تصویر آیکن اندروید ضربه بزنید وپس از آن دوربین باز خواهد شد. یک عکس بگیرید، پس از عکس گرفتن دو دکمه ظاهر می شود که می شود که می پرسد آیا عکس را حفظ می کنید یا آن را حذف می کنید.
روی دکمه ی تیک (سبزرنگ) ضربه بزنید که پس از آن به برنامه ی دوربین بازمی گردید که عکس گرفته شده جایگزین آیکن اندروید شده است.
استفاده مستقیم از دوربین API ارائه شده در برنامه ی اندروید.
ما از دوربین API برای کامل کردن برنامه ی دوربین استفاده خواهیم کرد.
ابتدا نیاز خواهید داشت تا با استفاده از روش استاتیک ارائه شده به وسیله api مقداردهی آبجکت دوربین را آغاز کنید. ترکیب آن به شکل زیر می باشد.
Camera object = null;
object = Camera.open();
علاوه برعملکرد بالا، عملکردهای دیگری توسط گروه camera ارائه می شوند که در زیر بیان شده اند.
اکنون نیاز دارید که یک گروه مجزا بسازید و آن را با SurfaceView گسترش دهید و اینترفیس SurfaceHolder را اجرا کنید. دو گروهی که استفاده می شوند دارای اهداف زیر می باشند.
شما باید روش پیش نمایش گروه دوربین را برای آغاز پیش نمایش برای یوزر فرا بخوانید.
public class ShowCamera extends SurfaceView implements SurfaceHolder.Callback {
private Camera theCamera;
public void surfaceCreated(SurfaceHolder holder) {
theCamera.setPreviewDisplay(holder);
theCamera.startPreview();
}
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3){
}
public void surfaceDestroyed(SurfaceHolder arg0) {
}
}
علاوه برپیش نمایش، آپشن های دیگری برای دوربین وجود دارد که می تواند با استفاده از عملکردهای دیگر که توسط Camera API ارائه می شوند، تنظیم شود.
مثال:
مثال زیر استفاده ی camera API را در برنامه توضیح می دهد.
برای آزمایش با این مثال به یک دستگاه موبایل مجهز شده با آخرین ورژن Android OS نیاز دارید، زیرا مقلد دوربین را پشتیبانی نمی کند.
در زیر محتوای فایل تغییر یافته ی فعالیت اصلی را مشاهده می کنید.
src/com.example.camera1/MainActivity.java.
package com.example.camera1;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity {
private Camera cameraObject;
private ShowCamera showCamera;
private ImageView pic;
public static Camera isCameraAvailiable(){
Camera object = null;
try {
object = Camera.open();
}
catch (Exception e){
}
return object;
}
private PictureCallback capturedIt = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Bitmap bitmap = BitmapFactory.decodeByteArray(data , 0, data .length);
if(bitmap==null){
Toast.makeText(getApplicationContext(), "not taken", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(getApplicationContext(), "taken", Toast.LENGTH_SHORT).show();
}
cameraObject.release();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pic = (ImageView)findViewById(R.id.imageView1);
cameraObject = isCameraAvailiable();
showCamera = new ShowCamera(this, cameraObject);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(showCamera);
}
public void snapIt(View view){
cameraObject.takePicture(null, null, capturedIt);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
فایل جدید جاوا با نام src/com.example.camera1/ShowCamera.java. را ایجاد کنید و کد زیر را به آن اضافه کنید.
package com.example.camera1;
import java.io.IOException;
import android.content.Context;
import android.hardware.Camera;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class ShowCamera extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder holdMe;
private Camera theCamera;
public ShowCamera(Context context,Camera camera) {
super(context);
theCamera = camera;
holdMe = getHolder();
holdMe.addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
theCamera.setPreviewDisplay(holder);
theCamera.startPreview();
} catch (IOException e) {
}
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
}
}
محتوای res/layout/activity_main.xml را تغییر دهید.
محتوای res/values/string.xml تغییر دهید.
Camera1
Settings
Hello world!
Capture
محتوای AndroidManifest.xml را تغییر دهید و دستورات جدید را به طوری که در زیر می بینید به آن اضافه کنید.
اجازه بدهید برنامه ی SendSMSDemo را اجرا کنیم. فرض می کنیم که دستگاه موبایل خود را به کامپیوتر متصل کرده اید. برای اجرای برنامه از Eclipse، یکی از فایل های فعالیت پروژه را باز کنید و روی آیکن Run از تولبار کلیک کنید.قبل از شروع برنامه ی شما، Eclipse پنجره ی زیر را برای انتخاب محل اجرای برنامه ی اندروید خود، نمایش خواهد داد.
موبایل خود را به عنوان یک گزینه انتخاب کرده و سپس آن را چک کنید که صفحه ی زیر نمایش خواهد داد.
دروبین شروع به نشان دادن پیش نمایش در قسمت بالایی قاب می کند. روی دکمه ی capture ضربه بزنید. اکنون شما هم می توانید تصویرگرفته شده را ذخیره کنید، در وب آپلود کنید و هم می توانید آن را حذف کنید.