فتح معرض الصور في الأندرويد || إصلاح الأخطاء وبعض الاضافات

السلام عليكم ورحمة الله وبركاته …..

لقد قمت بكتابة درس عن استخدام معرض الصور في الاندرويد لكي يأخذ
المستخدم صورة منه وبعدها يستخدمها في التطبيق (كصورة شخصية أو غير ذلك… )

هذا رابط الدرس :
https://andrody.com/2015/10/upload_photo_gallery_to_application_android_programmatically/

طبعا قبل قراءة هذا الدرس عليك مراجعة الدرس الماضي لاننا سنقوم بإصلاح الأخطاء الان والتعديل على الكود قليلا

أعتقد أن البعض قد واجه بعض المشاكل في استخدام الكود الذي وضعته في الدرس الماضي .. عند تشغيل البرنامج سوف يظهر خطأ عند اختيار الصورة من المعرض الذي تم فتحه
مما سيسبب توقف التطبيق والسبب في ذلك هو أنك لم تكتب الصلاحيات في ملف المينفيست ..

أعني صلاحيات فتح ملفات من الجهاز واستخدامها في التطبيق .. ومن دون اضافة الصلاحياإلى ملف المينفيست فلن تستطيع
قراءة ملفات من الذاكرة الخارجية للجهاز

الآن , اذهب إلى ملف المينفيست وقم بإضافة هذا السطر :

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

هناك خطأ آخر بالكود قد يظهر عند استخدام ال InputStream وهو :Unhandled Exception : java.io.FileNotFoundException
والسبب انه قد يظهر هذا الخطأ عند اختيار صورة غير موجودة أو تم حذفها
لذلك سنقوم باستخدام try و catch لمعالجة هذا ال exception (الكاتش تقوم فقط بمعالجة هذا الخطأ حين ظهوره
لكن في الحالات العادية هو لن يظهر)
الآن سوف يصبح الكود داخل دالة onActivityResult

if(requestCode == 1 && resultCode == RESULT_OK){
            Uri photo_uri = data.getData();
            try {
                InputStream imagestream = getContentResolver().openInputStream(photo_uri);
                Bitmap selected_photo = BitmapFactory.decodeStream(imagestream);
                photo.setImageBitmap(selected_photo);
            }catch (FileNotFoundException FNFE){
                Toast.makeText(Gallery_main.this,FNFE.getMessage(),Toast.LENGTH_LONG).show();
            }

 

الآن قمنا بمعالجة الخطأ … أي ان ظهر هذا ال exception  سوف ينفذ الكود بداخل الكاتش  ..

الآن فلتجرب أن تقوم بتشغيل التطبيق على المحاكي أو على هاتفك واضغط على الزر .. سيفتح الاستديو ثم اختر الصورة التي تريدها   بعدها سيعود لتطبيقك وستجد الصورة  في مكان الImageView وهذه هي فائدة دالة onActivityResult

..وإذا واجهت أي خطأ آخر .. قم بالتعليق أسفل المدونة وأخبرنا عن الخطأ الذي واجهك

بعد أن تختر الصورة قد تظهر الصورة غير متناسقة أو كبيرة/صغيرة عند عرضها في ImageView ولذلك علينا تغيير حجم الصورة لتصبح متناسقة مع الImageView

في البداية … علينا تغيير عرض و ارتفاع الصورة ونجعلهما مثل العرض والطول للImageView

اذهب إلى ملف اللاياوت  الخاص بالاكتيفيتي الرئيسية xml   وقم بتغيير حجم الصورة عن طريق خاصية layout_width و layout_height   وقم بجعلهما 100dp :

layout_width = “100dp”

layout_height = “100dp “

والآن بما أن ارتفاع الصورة وعرضها أصبح يساوي 100 ,, علينا تغيير حجم الصورة التي اختارها المستخدم من المعرض إلى نفس حجم ال ImageView

في داخل دالة onActivityResult  أكمل الكود بإضافة التالي :

selected_photo =Bitmap.createScaledBitmap(selected_photo, 100, 100, true);
photo.setImageBitmap(selected_photo);

 

ما قمنا بفعله هو تغيير طول وعرض الصورة باستخدام دالة createScaledBitmap في الباراميتر الأول : البيتماب التي تريد تغيير حجمها , الثاني : العرض الذي تريده و الثالث : الارتفاع الذي تريده,,  والأخير نقوم بوضع true  كقيمة افتراضية

و الآن سيصبح حجم الصورة على حجم ال ImageView

ملاحظة : اذا قمت بتغيير ارتفاع أو عرض ال ImageViewمن ال xml  عليك تغيير قيمة ال 100 هنا أيضا 

الآن سنقوم بتدوير الصورة :rotate

أحيانا عندما تضع الصورة في ImageView  قد يتغير اتجاهها أيضا  كأن تصبح مائلة إلى اليمين أو اليسار قليلا  لذلك سنقوم بتدويرها لتصبح مستقيمة

قم بإضافة هذا الكود :

Matrix matrix =new Matrix();
matrix.postRotate(0);
Bitmap rotated_photo = Bitmap.createBitmap(selected_photo,0,0,
selected_photo.getWidth(),selected_photo.getHeight(),matrix,true);

 

الماتركس هو مثل اعدادات للصورة .. بدالة postRotate قمنا بتغيير درجة الانحناء إلى 0 وبعدها بدالة createBitmap  قمنا باستخدام الارتفاع والعرض نفسه  واعطائها اعدادات الماتركس

الآن قم بتشغيل البرنامج .. سوف ترى الصورة مستقيمة بدون ميلان أو انحناء …. و بامكانك تغيير درجة النحناء إلى 45 مثلا لتجعل الصورة مائلة قليلا

هذه أحد طرق تغيير حجم الصورة وجعلها مائلة أيضا … من يواجه أي مشلكة في الكود أتمنى أن يخبرنا في التعليقات

انتظروا المزيد من الدروس قريبا .. والسلام عليكم

About Yaser Alosh

ياسر , من سوريا , أحب أن استخدم الحاسوب وأتعلم كل ما يتعلق به ,, بدأت بتعلم البرمجة , " كهواية " منذ بضعة أشهر , أعجبني مجال الأندرويد لأنه بسيط وسهل التعلم ثم بدأت بتعلم برمجة تطبيقاته , ولقد ساعدني موقع "اندرودي عربي " كثير في ذلك

Check Also

التقنيات التي نستطيع برمجة تطبيقات والعاب الاندرويد بها

هل أنت محتار من أين تريد البدأ في مجال برمجة التطبيقات للهواتف الذكية أو الألعاب عالية الاداء ؟ تعرف في هذا المقال عن اللغات والتقنيات واختر منها ما يناسبك لدخول هذا المجال

تعلم برمجة تطبيق اندرويد لمدونتك البلوجر (1)

هل لديك تدوينة أو موقع إخباري ؟ أو معرض يعرض الكثير من البيانات من وسائط ؟ وبحاجة لعرضها في تطبيق اندرويد ؟ هذه فرصتك من هنا وللمبتدئين تعلم برمجة تطبيق لمدونتك

عرض صورة في التطبيق من فايربيس

بسم الله الرحمن الرحيم اليوم سيكون شرحنا عن كيفية عرض صورة  في التطبيق من قاعدة …

2 comments

  1. سلام

ضع بصمتك بتعليق يعبر عن امتنانك

هذا الموقع يستخدم Akismet للحدّ من التعليقات المزعجة والغير مرغوبة. تعرّف على كيفية معالجة بيانات تعليقك.