هیچ دوره ای در سبد آموزش شما وجود ندارد
افکت تصاویر اندروید
صفحه نخستاندروید به شما اجازه می دهد تا تصاویر را با افکت های مختلف روی آن ها به کار برید. شما به راحتی می توانید تکنیک های مختلف تصاویر را برای افزودن افکت های خاص روی تصاویر به کار ببرید. این افکت ها می توانند روشن شدن، تار شدن و تبدیل به grayscle و غیره باشند.
اندروید گروه Bitmap را برای به کاربردن تصاویر ارائه می دهد، که می توان آن را در زیر android.graphics.bitmap پیدا کرد. راه های زیادی برای به کاربردن bitmap به عنوان نمونه وجود دارند. ما یک تصویر bitmap از قسمت imageview ایجاد می کنیم .
private Bitmap bmp; private ImageView img; img = (ImageView)findViewById(R.id.imageView1); BitmapDrawable abmp = (BitmapDrawable)img.getDrawable();
اکنون با فراخوانی getBitmap() از گروه BitmapDrawable می توانیم bitmap را ایجاد کنیم. ترکیب آن مانند زیر می باشد.
bmp = abmp.getBitmap();
یک تصویر چیزی به جز یک ماتریکس دوبعدی نیست. از همان راهی که یک bitmap را به کار می گیرید. یک پیکسل تشکیل شده است. بنابراین شما پیکسل ها را از این bitmap گرفته و فرایند را روی آن به کار می برید. ترکیب آن مانند زیر می باشد .
for(int i=0; i<bmp.getWidth(); i++){ for(int j=0; j<bmp.getHeight(); j++){ int p = bmp.getPixel(i, j); } }
در کد فوق توابع ()getWidth و ()getHeight عرض و ارتفاع ماتریس را برمی گرداند.
متد ()getPixel پیکسل ها را از index مشخص شده برمی گرداند.
هنگامی که پیکسل را گرفتید، می توانید به راحتی با توجه به نیازهای خود آن را دستکاری کنید.
علاوه بر متدهای فوق ، متدهای دیگری نیز ارائه شده که اجازه ی انواع دستکاری ها را روی تصاویر می دهد:
شماره | متد و توضیحات |
1 | copy(Bitmap.Config config, boolean isMutable)
این متد پیکسل های یک bitmap را در bitmap جدید کپی می کند. |
2 | createBitmap(DisplayMetrics display, int width, int height, Bitmap.Config config)
یک bitmap قابل تغییر را با عرض و ارتفاع مشخص شده برمی گرداند. |
3 | createBitmap(int width, int height, Bitmap.Config config)
یک bitmap قابل تغییر را با عرض و ارتفاع مشخص شده برمی گرداند. |
4 | createBitmap(Bitmap src)
یک bitmap غیر قابل تغییر را از bitmap منبع برمی گرداند. |
5 | extractAlpha()
یک bitmap جدید را که حاوی مقدار آلفا از اصلی آن است را برمی گرداند. |
6 | getConfig()
این متد پیکربندی را برمی گرداند، در غیر این صورت null است. |
7 | getDensity()
چگالی یک bitmap را برمی گرداند. |
8 | getRowBytes()
تعداد بایت های بین سطرهای پیکسلهای bitmap را برمی گرداند. |
9 | setPixel(int x, int y, int color)
رنگ های مشخص شده را داخل bitmap بر اساس مختصات x و y می نویسد. |
10 | setDensity(int density)
چگالی یک bitmap را برمی گرداند. |
مثال
مثال زیر برخی از افکت های تصویری روی یک bitmap را به شما نشان می دهد.
برای اجرا یا تست این برنامه شما نیاز به یک دستگاه اندروید واقعی دارید.
ردیف | توضیحات |
1 | مراحل ایجاد برنامه در اندروید استودیو را طبق بخش های قبلی دنبال کرده و نام پکیج را com.example.effect قرار بدهید. |
2 | به محتوای فایل src/MainActivity.java کدهای ضروری را اضافه کنید. |
3 | اجزای طراحی را در محتوای فایل res/layout/activity_main تعریف کنید. |
4 | برنامه را اجرا کنید تا شبیه ساز اندروید نتیجه را نمایش دهد. |
محتوای فایل MainActivity.java را به صورت زیر تغییر دهید:
package com.example.sairamkrishna.myapplication; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; public class MainActivity extends ActionBarActivity { Button b1, b2, b3; ImageView im; private Bitmap bmp; private Bitmap operation; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b1 = (Button) findViewById(R.id.button); b2 = (Button) findViewById(R.id.button2); b3 = (Button) findViewById(R.id.button3); im = (ImageView) findViewById(R.id.imageView); BitmapDrawable abmp = (BitmapDrawable) im.getDrawable(); bmp = abmp.getBitmap(); } public void gray(View view) { operation = Bitmap.createBitmap(bmp.getWidth(),bmp.getHeight(), bmp.getConfig()); double red = 0.33; double green = 0.59; double blue = 0.11; for (int i = 0; i < bmp.getWidth(); i++) { for (int j = 0; j < bmp.getHeight(); j++) { int p = bmp.getPixel(i, j); int r = Color.red(p); int g = Color.green(p); int b = Color.blue(p); r = (int) red * r; g = (int) green * g; b = (int) blue * b; operation.setPixel(i, j, Color.argb(Color.alpha(p), r, g, b)); } } im.setImageBitmap(operation); } public void bright(View view){ operation= Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(),bmp.getConfig()); for(int i=0; i<bmp.getWidth(); i++){ for(int j=0; j<bmp.getHeight(); j++){ int p = bmp.getPixel(i, j); int r = Color.red(p); int g = Color.green(p); int b = Color.blue(p); int alpha = Color.alpha(p); r = 100 + r; g = 100 + g; b = 100 + b; alpha = 100 + alpha; operation.setPixel(i, j, Color.argb(alpha, r, g, b)); } } im.setImageBitmap(operation); } public void dark(View view){ operation= Bitmap.createBitmap(bmp.getWidth(),bmp.getHeight(),bmp.getConfig()); for(int i=0; i<bmp.getWidth(); i++){ for(int j=0; j<bmp.getHeight(); j++){ int p = bmp.getPixel(i, j); int r = Color.red(p); int g = Color.green(p); int b = Color.blue(p); int alpha = Color.alpha(p); r = r - 50; g = g - 50; b = b - 50; alpha = alpha -50; operation.setPixel(i, j, Color.argb(Color.alpha(p), r, g, b)); } } im.setImageBitmap(operation); } public void gama(View view) { operation = Bitmap.createBitmap(bmp.getWidth(),bmp.getHeight(),bmp.getConfig()); for(int i=0; i<bmp.getWidth(); i++){ for(int j=0; j<bmp.getHeight(); j++){ int p = bmp.getPixel(i, j); int r = Color.red(p); int g = Color.green(p); int b = Color.blue(p); int alpha = Color.alpha(p); r = r + 150; g = 0; b = 0; alpha = 0; operation.setPixel(i, j, Color.argb(Color.alpha(p), r, g, b)); } } im.setImageBitmap(operation); } public void green(View view){ operation = Bitmap.createBitmap(bmp.getWidth(),bmp.getHeight(), bmp.getConfig()); for(int i=0; <bmp.getWidth(); i++){ for(int j=0; j<bmp.getHeight(); j++){ int p = bmp.getPixel(i, j); int r = Color.red(p); int g = Color.green(p); int b = Color.blue(p); int alpha = Color.alpha(p); r = 0; g = g+150; b = 0; alpha = 0; operation.setPixel(i, j, Color.argb(Color.alpha(p), r, g, b)); } } im.setImageBitmap(operation); } public void blue(View view){ operation = Bitmap.createBitmap(bmp.getWidth(),bmp.getHeight(), bmp.getConfig()); for(int i=0; i<bmp.getWidth(); i++){ for(int j=0; j<bmp.getHeight(); j++){ int p = bmp.getPixel(i, j); int r = Color.red(p); int g = Color.green(p); int b = Color.blue(p); int alpha = Color.alpha(p); r = 0; g = 0; b = b+150; alpha = 0; operation.setPixel(i, j, Color.argb(Color.alpha(p), r, g, b)); } } im.setImageBitmap(operation); } }
محتوای فایل res/layout/activity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textView" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:textSize="30dp" android:text="Image Effects" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tutorials Point" android:id="@+id/textView2" android:layout_below="@+id/textView" android:layout_centerHorizontal="true" android:textSize="35dp" android:textColor="#ff16ff01" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView" android:layout_below="@+id/textView2" android:layout_centerHorizontal="true" android:src="@drawable/abc"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Gray" android:onClick="gray" android:id="@+id/button" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginBottom="97dp" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="dark" android:onClick="dark" android:id="@+id/button2" android:layout_alignBottom="@+id/button" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Bright" android:onClick="bright" android:id="@+id/button3" android:layout_alignTop="@+id/button2" android:layout_centerHorizontal="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Red" android:onClick="gama" android:id="@+id/button4" android:layout_below="@+id/button3" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Green" android:onClick="green" android:id="@+id/button5" android:layout_alignTop="@+id/button4" android:layout_alignLeft="@+id/button3" android:layout_alignStart="@+id/button3" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="blue" android:onClick="blue" android:id="@+id/button6" android:layout_below="@+id/button2" android:layout_toRightOf="@+id/textView" android:layout_toEndOf="@+id/textView" /> </RelativeLayout>
محتوای فایل AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.sairamkrishna.myapplication" > <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
بیایید برنامه را اجرا کنیم. فرض می کنیم که شما در هنگام انجام تنظیمات محیط AVDخود را ایجاد کرده اید. برای اجرای برنامه از Eclipseیکی از فایل های فعالیت پروژه ی خود را باز کنید و روی آیکن Run تولبار کلیک کنید. Eclipseبرنامه را روی AVDشما نصب خواهد کرد و اگر همه چیز در مورد تنظیمات و برنامه درست پیش رفته باشد، پنجره ی emulatorزیر را نمایش خواهد داد.

حالا اگر به صفحه ی خود در دستگاه موبایل نگاه کنید یک تصویر به همراه چند button را مشاهده خواهید کرد.
حالا روی Gray کلیک کنید تا تصویر شما سایه و سفید شود.

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

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

در نهایت روی دکمه ی red کلیک کنید تا همانند عکس زیر، زمینه تصویر را به رنگ قرمز تیره در آورد:

حالا روی دکمه ی green کلیک کنید تا زمینه ی تصویر مطابق عکس زیر به رنگ سبز روشن درآید:

در نهایت روی دکمه ی blue کلیک کنید تا رنگ زمینه ی تصویر به رنگ آبی درآید :