فهرست آموزش برنامه نویسی اندروید

افکت تصاویر اندروید

۱۳۹۸/۰۹/۰۶ ۳۵

اندروید به شما اجازه می دهد تا تصاویر را با افکت های مختلف روی آن ها به کار برید. شما به راحتی می توانید تکنیک های مختلف تصاویر را برای افزودن افکت های خاص روی تصاویر به کار ببرید. این افکت ها می توانند روشن شدن، تار شدن و تبدیل به 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 مشخص شده برمی گرداند.

هنگامی که پیکسل را گرفتید، می توانید به راحتی با توجه به نیازهای خود آن را دستکاری کنید.

علاوه بر متدهای فوق ، متدهای دیگری نیز ارائه شده که اجازه ی انواع دستکاری ها را روی تصاویر می دهد:

شماره متد و توضیحات
۱ copy(Bitmap.Config config, boolean isMutable)

این متد پیکسل های یک bitmap را در bitmap جدید کپی می کند.

۲ createBitmap(DisplayMetrics display, int width, int height, Bitmap.Config config)

یک bitmap قابل تغییر را با عرض و ارتفاع مشخص شده برمی گرداند.

۳ createBitmap(int width, int height, Bitmap.Config config)

یک bitmap قابل تغییر را با عرض و ارتفاع مشخص شده برمی گرداند.

۴ createBitmap(Bitmap src)

یک bitmap غیر قابل تغییر را از bitmap منبع برمی گرداند.

۵ extractAlpha()

یک bitmap جدید را که حاوی مقدار آلفا از اصلی آن است را برمی گرداند.

۶ getConfig()

این متد پیکربندی را برمی گرداند، در غیر این صورت null است.

۷ getDensity()

چگالی یک bitmap را برمی گرداند.

۸ getRowBytes()

تعداد بایت های بین سطرهای پیکسلهای bitmap را برمی گرداند.

۹ setPixel(int x, int y, int color)

رنگ های مشخص شده را داخل bitmap بر اساس مختصات x و y می نویسد.

۱۰ setDensity(int density)

چگالی یک bitmap را برمی گرداند.

مثال

مثال زیر برخی از افکت های تصویری روی یک bitmap را به شما نشان می دهد.

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

ردیف  توضیحات
۱ مراحل ایجاد برنامه در اندروید استودیو را طبق بخش های قبلی دنبال کرده و نام پکیج را com.example.effect قرار بدهید.
۲ به محتوای فایل src/MainActivity.java کدهای ضروری را اضافه کنید.
۳ اجزای طراحی را در محتوای فایل  res/layout/activity_main تعریف کنید.
۴ برنامه را اجرا کنید تا شبیه ساز اندروید نتیجه را نمایش دهد.

 

محتوای فایل 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یکی از فایل های فعالیت پروژه ی خود را باز کنید و روی آیکن RunEclipse Run Icon تولبار کلیک کنید. Eclipseبرنامه را روی AVDشما نصب خواهد کرد و اگر همه چیز در مورد تنظیمات و برنامه درست پیش رفته باشد، پنجره ی emulatorزیر را نمایش خواهد داد.

Anroid Image Effects Tutorial

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

حالا روی Gray کلیک کنید تا تصویر شما سایه و سفید شود.

Anroid Image Effects Tutorial

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

Anroid Image Effects Tutorial

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

افکت , اندروید , تصاویر , تصاویر اندروید , افکت تصاویر , android , effect , images , Bitmap , bitmap , ماتریکس , پیکسل , ماتریس ,

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

افکت , اندروید , تصاویر , تصاویر اندروید , افکت تصاویر , android , effect , images , Bitmap , bitmap , ماتریکس , پیکسل , ماتریس ,

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

افکت , اندروید , تصاویر , تصاویر اندروید , افکت تصاویر , android , effect , images , Bitmap , bitmap , ماتریکس , پیکسل , ماتریس ,

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

افکت , اندروید , تصاویر , تصاویر اندروید , افکت تصاویر , android , effect , images , Bitmap , bitmap , ماتریکس , پیکسل , ماتریس ,

دانشجویار نماد اعتماد به دانشجویار مجوز نشر دیجیتال لوگو شرکت به پرداخت ملت logo-samandehi مجوز سازمان فنی حرفه ای کشور
blackFriday

پیش از شروع جشنواره بلک فرایدی
خودت رو برای یک خرید برق آسا آماده کن!


بلک فرایدی!

برای شرکت در جشنواره بلک فرایدی لطفا ثبت نام کنید.

  از الان برای بلک فرایدی آماده شو - رزرو تخفیف 90% ، برای همه آموزش ها  صفحه جشنواره