PDA

View Full Version : راهنمایی برای کار با دوربین در اندروید



reza ghorbani
چهارشنبه 17 دی 1393, 16:35 عصر
سلام دوستان
یه برنامه دارم می نویسم که بتونه خودش دوربینو مدیریت کنه و عکس بگیره تو یه سایز خاص و ثابت و اونو ذخیره کنه. حالا من از دوستان و اساتید گرامی خواهش می کنم که اگه منبعی واسه کمک تو کار کردن با دوربین دارن یا مطلب مفیدی دارن که به درد این کار می خوره؛ بگن تا هم من استفاده کنم هم بقیه دوستان.

ali reza mansoori 2
چهارشنبه 17 دی 1393, 23:08 عصر
دوستان من هم دنبال همچین چیزی هستم
یعنی اون چیزی که من میخوام اینجوریه
توسط دوربین عکس گرفته بشه
بعد با نسبت طول و عرضی که مشخص میکنم کاربر کراپش کنه
بعد با کیفیتی که مشخص میکنم ذخیره شه

reza ghorbani
پنج شنبه 18 دی 1393, 16:25 عصر
خب مثل اینکه کسی نتونست کمک کنه!!!
من یه خورده گشتم و فهمیدم داستان از چه قراریه. داستان اینجوریه که گویا دو نوع کار با دوربین وجود داره:
نوع اول اینه که یه برنامه بسازیم و وقتی که می خوایم با دوربین کار داشته باشیم بره و همون برنامه دوربین(camera) خود گوشی و باز کنه و با اون حالا می خواد عکسی بگیره؛ بگیره و یا هر کاره دیکه ای. بعد برگرده به برنامه ما و یه مقدار برگشتی بده که ازش استفاده کنیم. تو بیشتر سایتا هم همینو گفته. ولی من و آقا علیرضا منصوری اینو نمی خوایم. حالا من این داستان و یه خوردهه توضیح بدم بر بریم سر داستان نوع دوم!!!
هسته این داستان کلا سه تا خط کده:
اول اینکه یه اینتنت که شامل پارامتر زیر باشه می سازیم

Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
در مرحله بعدی با استفاده از متد StartActivityFromResult() ؛ اینتنت دوربینو اجرا می کنیم. وقتی این متد اجرا بشه برنامه دوربین گوشی اجرا می شه و کاربر می تونه عکس یا فیلم بگیره یا کنسل کنه و برگرده.
تو مرحله آخرم متد onActivityResult() تو برنامه override می کنیم یا خودمون می نویسیم. کار این متدم اینه که وقتی کاربر عکس یا فیلمی گرفته سیستم این متد و صدا می زنه و سه تا مقدار رو بر می گردونه.
این داستان کلی نوع اول بود. هسته داستان این بود. حالا جزییاتشم خودتون بررسی کنید.
و اما داستان دوم!!!
نوع دومی که ما می خوایم و خیلی هم کاربردی و انعطاف پذیره به این صورتی که توضیح می دم:
اول باید دوربین و پیدا کنیم و بهش دسترسی داشته باشیم. یعنی کدی بنویسیم که این کارو واسمون انجام بده(Detect and Access Camera )
بعد باید از کلاس preview استفاده کنیم که از کلاس surfaceView ارث بری کرده باشه. یا همون extend.
بعد از اون باید یه لایوت previewبسازیم. یعنی اینکه قیافه دوربینه خودمونه درست کنیم.
بعد باید دوربین و در دست بگیریم!!! یعنی مال خودمون کنیم. مثلا تو رویداد کلیک یه باتن؛ پریویو قبلی رو بیاریمو دوربینو رو اون سوار کنیم.
بعد کاری که مو خوایم و انجام بدیم و فایلمون و ذخیره کنیم.
در نهایتم باید دوربین و ول کنیم!! یعنی کاری کنیم که اگه برنامه دیکه ای خواست بهش وصل شه بتونه. در اختیار ما نباشه.
هسته نوع دوم این بود که گفتم. حالا من دارم روش کار می کنم و یه sample می سازم و میزارم اینجا تا بقیه هم استفاده کنن.
اگه خواستین کداشم تک تک می زارم...

ali reza mansoori 2
جمعه 19 دی 1393, 16:00 عصر
داداش sample رو برای ما هم بزار
من دنبال همچین چیزی هستم

reza ghorbani
جمعه 19 دی 1393, 20:48 عصر
دارم روش کار می کنم. تک تک کدارو می زارم. در نهایتم sample رو می زارم. ایشالا که برای بقیه هم مفید باشه...

reza ghorbani
جمعه 19 دی 1393, 22:20 عصر
خب دوستان. من یه کدایی آماده کردم. واسه بخش اول ساخت برنامه دوربین خودمون.
گفتم که اول باید دوربین و پیدا کنیم بهد بهش دسترسی داشته باشیم.
۱-کد پیدا کردن سخت افزار دوربین تو گوشی(Detect)

private boolean checkCameraHardware(Context context) { if (context.getPackageManager().hasSystemFeature(Pack ageManager.FEATURE_CAMERA)){
// this device has a camera
return true;
} else {
// no camera on this device
return false;
}
}

۲- دسترسی به سخت افزار دوربین


public static Camera getCameraInstance(){ Camera c = null;
try {
c = Camera.open(); // attempt to get a Camera instance
}
catch (Exception e){
// Camera is not available (in use or does not exist)
}
return c; // returns null if camera is unavailable
}

reza ghorbani
دوشنبه 22 دی 1393, 16:20 عصر
مثل اینکه با این مبحث کسی حال نمی کنه!! هیچ کسم که همکاری نمی کنه!!!!
به هر حال؛ بالاخره تونستم sample برنامه دوربین و درست کنم. ایشالا که برای همه مفید باشه....

AliRezaBeytari
دوشنبه 22 دی 1393, 19:21 عصر
مثل اینکه با این مبحث کسی حال نمی کنه!! هیچ کسم که همکاری نمی کنه!!!!
به هر حال؛ بالاخره تونستم sample برنامه دوربین و درست کنم. ایشالا که برای همه مفید باشه....

متاسفانه روی Device من اجرا نشد !!

ali reza mansoori 2
دوشنبه 22 دی 1393, 23:27 عصر
داداش این امتحانات لعنتی نمیزاره که
من خدایی پیگیر این برنامه ام ولی وقت نمیکنم
تونستم تستش میکنم و میزارم اینجا نتیجشو

reza ghorbani
سه شنبه 23 دی 1393, 14:35 عصر
متاسفانه روی Device من اجرا نشد !!

خطا می ده؟؟
چه خطایی داره؟؟

AliRezaBeytari
سه شنبه 23 دی 1393, 15:31 عصر
خطا می ده؟؟
چه خطایی داره؟؟

روی Emulator به درستی کار میکنه ، اما وقتی برنامه رو بر روی گوشیم (Samsung Galaxy S4 mini) اجرا میکنم ، Stop worked میده !

reza ghorbani
سه شنبه 23 دی 1393, 18:57 عصر
روی Emulator به درستی کار میکنه ، اما وقتی برنامه رو بر روی گوشیم (Samsung Galaxy S4 mini) اجرا میکنم ، Stop worked میده !
ببین وقتی که دوربین در اختیار یه برنامه دیگه باشه کار نمی کنه. باید اول دوربینو آزاد کنه بعد. همونجوری که تو کدم هست همین برنامه بعد از اینکه کارش تموم می شه دوربین و release می کنه. این خطا رو رقتی میده که دوربین در اختیار یه برنامه دیگه باشه.
نمی دونم کمکت کردم یا نه!!! ولی دقیقا چه خطایی می ده رو با جزییاتش بگی می تونم بیشتر راهنماییت کنم...

AliRezaBeytari
سه شنبه 23 دی 1393, 21:49 عصر
ببین وقتی که دوربین در اختیار یه برنامه دیگه باشه کار نمی کنه. باید اول دوربینو آزاد کنه بعد. همونجوری که تو کدم هست همین برنامه بعد از اینکه کارش تموم می شه دوربین و release می کنه. این خطا رو رقتی میده که دوربین در اختیار یه برنامه دیگه باشه.
نمی دونم کمکت کردم یا نه!!! ولی دقیقا چه خطایی می ده رو با جزییاتش بگی می تونم بیشتر راهنماییت کنم...

آخه چون روی Device هست نمیتونم خطا رو بدم. فقط Stop worked میده. و درمورد اون قسمت که گفتید دوربین نباید در اختیار یه برنامه دیگه باشه ؛ من همه ی برنامه ها رو بستم و مطمئن هستم برنامه دیگه ای از دوربین استفاده نمیکنه. شما خودتون رو Real Device اجرا کردین ؟؟!!! خطایی نداشته ؟؟!!!

reza ghorbani
سه شنبه 23 دی 1393, 22:44 عصر
آخه چون روی Device هست نمیتونم خطا رو بدم. فقط Stop worked میده. و درمورد اون قسمت که گفتید دوربین نباید در اختیار یه برنامه دیگه باشه ؛ من همه ی برنامه ها رو بستم و مطمئن هستم برنامه دیگه ای از دوربین استفاده نمیکنه. شما خودتون رو Real Device اجرا کردین ؟؟!!! خطایی نداشته ؟؟!!!

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

reza_web
سه شنبه 11 فروردین 1394, 12:07 عصر
برنامه كه نوشتيد كامل كار مي كنه و مشكلي نداره
دستتون هم درد نكنه
ولي برنامه شما از برنامه خود گوشي براي عكس گرفتن استفاده مي كنه آيا ميشه در داخل برنامه (مثلا داخل كادري كه ما در برنامه مشخص كرده ايم) دوربين فعال بشه؟؟
فرضا ما يك الگو (مثلا تصوير آدم بدون سر) در برنامه داريم و مي خواهيم كاربر طوري عكس بگيره كه دقيقا سر خودش جاي سر خالي مورد نظر ما قرار بگيره. براي اينكار بهتره كاربر الگوي ما را جهت بهتر عكس گرفتن در لحظه عكاسي ببينه

ايا اين امكانپذيره؟؟
ممنون