در این آموزش برنامه نویسی اندروید، می خواهیم کنتراست یک تصویر را تغییر دهیم. شما در این آموزش یاد می گیرید که چطور کنتراست یک تصویر را، به صورت رنگی یا به صورت سیاه و سفید تغییر دهید.

کنتراست چیست؟

کُنْتْراسْت به‌معنای تباین و جدایی است و یکی از اصل‌های پایه‌ایِ رشته‌های گوناگونِ هنر است. فرق و کشمکشِ متقابلِ عناصر اثر هنری موجب برقرار شدن ارتباطی منطقی ولی متضاد بین اجزا می‌شود و در تأثیرگذاری اثر بسیار مؤثر است، چراکه درک انسان از بسیاری چیزها با تجربه و مقایسهٔ شکل، کیفیت، و معناهای آنها به‌دست می‌آید.

تغییر تدریجیِ مقدار کنتراست در یک عکس در هنرهای تجسمی مانند نقاشی، عکاسی و گرافیک، کنتراست‌های رنگ، تیرگی ـ روشنی، اندازه، جهت، بافت، پهنی ـ باریکی، هندسی ـ غیرهندسی و… به‌کار می‌رود و اثر هنری را تأثیرگذار می‌کند.

برای نمونه، رامبراند معمولاً از کنتراست شدید تیرگی ـ روشنی بهره گرفته و با تاباندن نور در بخش‌های موردنظرش، که درمیان سایه‌های تیرهٔ وسیع در تابلو قرار گرفته‌اند، بر این بخش‌ها تأکید می‌کند.

[منبع: ویکی پدیا]

پروژه جدیدی با حداقل SDK مورد نیاز ۱۰ ایجاد کنید و لایوت اصلی (activity_main.xml) را باز کنید. در این لایوت، یک button و یک imageView به شکل زیر وارد کنید:

 

پوشه ای با نام drawable هم در پوشه res ایجاد کرده و یک تصویر دلخواه در آن قرار دهید. من نام این تصویر را image گذاشته ام.

حالا دستورات زیر را در اکتیویتی اصلی برنامه کپی کنید:

 

خوب! تا اینجای کار، ما کنتراست سیاه و سفید تصویر را به دست آورده ایم. که می توانید نتیجه را در ادامه مشاهده کنید.

تصویر اصلی چیزی شبیه به تصویر زیر خواهد بود:

برنامه نویسی اندروید - تغییر کنتراست رنگی و سیاه و سفید تصویر

این هم نتیجه کار:

برنامه نویسی اندروید - تغییر کنتراست رنگی و سیاه و سفید تصویر

حالا اگر بخواهیم کنتراست رنگی را تغییر دهیم، دستورات موجود در اکتیویتی را به صورت زیر تغییر می دهیم:

 

این هم نتیجه کار:

برنامه نویسی اندروید - تغییر کنتراست رنگی و سیاه و سفید تصویر

من مقدار ۱۰۰ رو به عنوان ورودی تابع در نظر گرفتم. با تغییر این مقدار، می توانید میزان کنتراست های متفاوتی به دست آورید.

Sepia-toning، یک افکت بسیار زیبا است که با اعمال آن روی تصویر، رنگ تصویر تغییر کرده و چیزی مانند تصویر زیر حاصل می شود:

برنامه نویسی اندروید - اعمال افکت Sepia-toning روی تصویر

در این آموزش، برنامه ای خواهیم نوشت که در این برنامه، با کلیک روی یک دکمه، تصویر موجود در ImageView تغییر رنگ خواهد داد.

پروژه جدیدی با حداقل SDK مورد نیاز ۱۰ ایجاد کنید و لایوت اصلی (activity_main.xml) را باز کنید. در این لایوت، یک button و یک imageView به شکل زیر وارد کنید:

پوشه ای با نام drawable هم در پوشه res ایجاد کرده و یک تصویر دلخواه در آن قرار دهید. من نام این تصویر را image گذاشته ام.

حالا دستورات زیر را در اکتیویتی اصلی برنامه کپی کنید:

تصویر اصلی چیزی شبیه به تصویر زیر خواهد بود:

برنامه نویسی اندروید - اعمال افکت Sepia-toning روی تصویر

این هم نتیجه کار:

برنامه نویسی اندروید - اعمال افکت Sepia-toning روی تصویر

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

پروژه جدیدی با حداقل SDK مورد نیاز ۱۰ ایجاد کنید و لایوت اصلی (activity_main.xml) را باز کنید. در این لایوت، یک button و یک imageView به شکل زیر وارد کنید:

پوشه ای با نام drawable هم در پوشه res ایجاد کرده و یک تصویر دلخواه در آن قرار دهید. من نام این تصویر را image گذاشته ام.

حالا دستورات زیر را در اکتیویتی اصلی برنامه کپی کنید:

 

شما می توانید بستگی به نیازتان، رنگ و اندازه فونت را تغییر دهید و یا نوشته را زیرخط دار کنید.

تصویر اصلی من:

برنامه نویسی اندروید - اضافه کردن نوشته روی تصویر

این هم نتیجه کار (نوشته به رنگ سبز):

برنامه نویسی اندروید - اضافه کردن نوشته روی تصویر

یک نمونه دیگر (نوشته رنگ زرد و زیرخط دار):

برنامه نویسی اندروید - اضافه کردن نوشته روی تصویر

در این آموزش، برنامه ای خواهیم نوشت که، با کلیک روی یک دکمه، رنگ هر یک از پیکسل های تصویر موجود در ImageView معکوس می شود.

پروژه جدیدی با حداقل SDK مورد نیاز ۱۰ ایجاد کنید و لایوت اصلی (activity_main.xml) را باز کنید. در این لایوت، یک button و یک imageView به شکل زیر وارد کنید:

پوشه ای با نام drawable هم در پوشه res ایجاد کرده و یک تصویر دلخواه در آن قرار دهید. من نام این تصویر را image گذاشته ام.

حالا دستورات زیر را در اکتیویتی اصلی برنامه کپی کنید:

تصویر اصلی چیزی شبیه به تصویر زیر خواهد بود:

 برنامه نویسی اندروید - معکوس کردن رنگ تصویر

این هم نتیجه کار:

 برنامه نویسی اندروید - معکوس کردن رنگ تصویر

در این آموزش از سری آموزش پردازش تصویر در برنامه نویسی اندروید، نحوه سایه دار کردن یا هایلایت کردن تصویر را خواهم گفت. در واقع منظور من از سایه دار کردن و هایلایت کردن تصویر، یک چیز است، یعنی من یک کد می نویسم و بستگی به اینکه چه رنگی به آن بدهیم، هایلایت یا سایه دار خواهد شد.

اگر مثل من پس زمینه تصویر را تیره قرار دهید، می توانید برای آن هایلایت ایجاد کنید (در واقع سایه روشن می زنیم مثلا سفید یا زرد رنگ) ولی اگر زمینه را روشن بگذارید می توانید تصویر را سایه دار کنید (با انتخاب رنگ های تیره به عنوان سایه).

بهتر است شروع کنیم تا منظور من را بهتر متوجه شوید.

پروژه جدیدی با حداقل SDK مورد نیاز ۱۰ ایجاد کنید و لایوت اصلی (activity_main.xml) را باز کنید. در این لایوت، یک button و یک imageView به شکل زیر وارد کنید:

پوشه ای با نام drawable هم در پوشه res ایجاد کرده و یک تصویر دلخواه در آن قرار دهید. من نام این تصویر را image گذاشته ام.

حالا دستورات زیر را در اکتیویتی اصلی برنامه کپی کنید:

تصویر اصلی من یک مربع قرمز رنگ است:

برنامه نویسی اندروید - هایلایت کردن تصویر

تصویر من بعد از اجرای برنامه و قبل از فشردن دکمه (پس زمینه را سیاه کرده ام):

برنامه نویسی اندروید - هایلایت کردن تصویر

حالا اگر دکمه را فشار دهم یک سایه سفید رنگ که همان هایلات است برای تصویر ایجاد می شود:

برنامه نویسی اندروید - هایلایت کردن تصویر

می توانید سایه را یک رنگ تیره انتخاب کرده و پس زمینه را برای LinearLayout در فایل activity_main.xml برابر با ffffff# قرار دهید.

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

پروژه جدیدی با حداقل SDK مورد نیاز ۱۰ ایجاد کنید و لایوت اصلی (activity_main.xml) را باز کنید. در این لایوت، یک button و یک imageView به شکل زیر وارد کنید:

پوشه ای با نام drawable هم در پوشه res ایجاد کرده و یک تصویر دلخواه در آن قرار دهید. من نام این تصویر را image گذاشته ام.

حالا دستورات زیر را در اکتیویتی اصلی برنامه کپی کنید:

همانطور که می بینید، ما نیاز به یک کلاس دگیر با نام ConvolutionMatrix داریم تا عملیات مروبط به ایجاد افکت و تغییرات روی تصویر را انجام دهد. یک اکتیویتی جدید به با همین نام ایجاد کرده و دستورات زیر را درون آن قرار دهید:

توجه داشته باشید که کلاس ConvolutionMatrix یک کلاس آماده است که در برنامه های قبل هم از آن استفاده کرده ایم و شاید در آینده هم از آن استفاده کنیم.

تصویر اصلی چیزی شبیه به تصویر زیر خواهد بود:

برنامه نویسی اندروید - Gaussian Blur

این هم نتیجه کار:

برنامه نویسی اندروید - Gaussian Blur

در این آموزش، با افکت Mean Removal آشنا خواهید شد. اگر آموزش های قبلی را دنبال کرده باشید، حتما با کلاس جاوای ConvolutionMatrix آشنا هستید. برای اعمال این افکت روی تصویر هم باید از کلاس ConvolutionMatrix استفاده کنیم.

پروژه جدیدی با حداقل SDK مورد نیاز ۱۰ ایجاد کنید و لایوت اصلی (activity_main.xml) را باز کنید. در این لایوت، یک button و یک imageView به شکل زیر وارد کنید:

پوشه ای با نام drawable هم در پوشه res ایجاد کرده و یک تصویر دلخواه در آن قرار دهید. من نام این تصویر را image گذاشته ام.

حالا دستورات زیر را در اکتیویتی اصلی برنامه کپی کنید:

و این هم دستورات مربوط به کلاس ConvolutionMatrix:

تصویر اصلی چیزی شبیه به تصویر زیر خواهد بود:

برنامه نویسی اندروید - افکت Mean Removal

این هم نتیجه کار:

برنامه نویسی اندروید - افکت Mean Removal

در این آموزش یاد خواهید گرفت که چطور حالت محو شدگی به تصویر موجود در ImageView اعمال کنید. در این آموزش با افکت Smooth آشنا می شوید که تصویر شما را کمی محو می کند.

پروژه جدیدی با حداقل SDK مورد نیاز ۱۰ ایجاد کنید و لایوت اصلی (activity_main.xml) را باز کنید. در این لایوت، یک button و یک imageView به شکل زیر وارد کنید:

پوشه ای با نام drawable هم در پوشه res ایجاد کرده و یک تصویر دلخواه در آن قرار دهید. من نام این تصویر را image گذاشته ام.

حالا دستورات زیر را در اکتیویتی اصلی برنامه کپی کنید:

همانطور که می بینید، ما نیاز به یک کلاس دگیر با نام ConvolutionMatrix داریم تا عملیات مروبط به ایجاد افکت و تغییرات روی تصویر را انجام دهد. یک اکتیویتی جدید به با همین نام ایجاد کرده و دستورات زیر را درون آن قرار دهید:

توجه داشته باشید که کلاس ConvolutionMatrix یک کلاس آماده است که در برنامه های قبل هم از آن استفاده کرده ایم و شاید در آینده هم از آن استفاده کنیم.

تصویر اصلی چیزی شبیه به تصویر زیر خواهد بود:

برنامه نویسی اندروید - محو شدگی تصویر

این هم نتیجه کار:

برنامه نویسی اندروید - محو شدگی تصویر

من مقدار ۵ رو به عنوان ورودی تابع در نظر گرفتم. با تغییر این مقدار، می توانید میزان محوشدگی یا smooth تصویر را تغییر دهید.

در این آموزش، یک برنامه اندرویدی خواهیم نوشت که با کلیک روی یک دکمه، تصویر موجو در ImageView به رنگ خاکستری تغییر رنگ خواهد کرد.

پروژه جدیدی با حداقل SDK مورد نیاز ۱۰ ایجاد کنید و لایوت اصلی (activity_main.xml) را باز کنید. در این لایوت، یک button و یک imageView به شکل زیر وارد کنید:

پوشه ای با نام drawable هم در پوشه res ایجاد کرده و یک تصویر دلخواه در آن قرار دهید. من نام این تصویر را image گذاشته ام.

حالا دستورات زیر را در اکتیویتی اصلی برنامه کپی کنید:

تصویر اصلی چیزی شبیه به تصویر زیر خواهد بود:

برنامه نویسی اندروید - خاکستری کردن تصویر

این هم نتیجه کار:

برنامه نویسی اندروید - خاکستری کردن تصویر

در این آموزش، از سری آموزش های پردازش تصویر، نحوه برگرداندن تصویر در راستای محور x-ها (به صورت افقی) یا در راستای محور y-ها (به صورت عمودی) را آموزش خواهم داد.

ما در این برنامه، ابتدا ۲ متغیر از نوع صحیح (int) تعریف می کنیم و به یکی از آنها مقدار عددی ۱ و به دیگری مقدار عددی ۲ را اختصاص می دهیم. سپس تابعی با نام flipImage تعریف می کنیم که کار برگرداندن تصویر یا mirroing و آینه کردن آن را انجام می دهد. تابع flipImage یک تصویر و یکی از دو  مقدار بالا (۱ یا ۲) را به عنوان ورودی می گیرد. سپس با توجه به عدد دریافتی تصویر را به صورت عمودی یا افقی بر می گرداند.

من مقدار ۱ را برای برگرداندن عمودی و ۲ را برای جهت افقی در نظر گرفته ام.

پروژه جدیدی با حداقل SDK مورد نیاز ۱۰ ایجاد کنید و لایوت اصلی (activity_main.xml) را باز کنید. در این لایوت، یک button و یک imageView به شکل زیر وارد کنید:

پوشه ای با نام drawable هم در پوشه res ایجاد کرده و یک تصویر دلخواه در آن قرار دهید. من نام این تصویر را image گذاشته ام.

حالا دستورات زیر را در اکتیویتی اصلی برنامه کپی کنید:

 

تصویر اصلی چیزی شبیه به تصویر زیر خواهد بود:

 برنامه نویسی اندروید - برگرداندن تصویر (آینه کردن)

این هم نتیجه کار:

 برنامه نویسی اندروید - برگرداندن تصویر (آینه کردن)

من مقدار ۲ را به تابع فرستاده ام تا تصویر به صورت افقی برگردانده شود. اگر مقدار ۱ را به آن بفرستید تصویر در جهت عمودی برگردانده می شود.