آموزش افکت تصاویر اندروید
آموزش افکت تصاویر اندروید
اندروید به شما اجازه می دهد تا تصاویر را با افکت های مختلف روی آنها به کار برید. شما به راحتی می توانید تکنیک های مختلف تصاویر را برای افزودن افکت های خاص روی تصاویر به کار ببرید. این افکت ها می توانند روشن شدن، تار شدن و سیاه و سفید و غیره باشند.
اندروید کلاس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() پیکسل را با یک شاخص معین نشان می دهد. زمانی که پیکسل را دریافت کردید می توانید آن را به راحتی و طبق نیاز خود به کار ببرید.
علاوه بر این متدها متدهای دیگری هم وجود دارند که به ما کمک می کنند تا از تصاویر خیلی بهتر استفاده کنیم.
-
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()
این متد config را بر میگرداند، در غیر اینصورت null را بر می گیرداند -
getDensity()
تراکم این bitmap را گزارش می دهد.
-
getRowBytes()
تعداد بایت های بین دو ردیف در پیکسل های bitmap را ارائه می دهد.
-
(int x, int y, int color)setPixel
روی مختصات X و y رنگ مشخص شده ی bitmap را می نویسد.
-
setDensity(int density)
تراکم مربوط به این bitmap را مشخص می کند.
مثال
مثال زیر برخی از افکت های تصاویر را روی bitmap توضیح می دهد. این مثال یک برنامه ی پایه ایجاد می کند که به شما اجازه می دهد تصاویر را به سیاه و سفید یا موارد دیگر تبدیل کنید.
برای اجرای این مثال به یک دستگاه واقعی نیاز خواهید داشت.
-
برای ایجاد یک برنامه ی اندروید از Eclipse IDE استفاده خواهید کرد و آن را با عنوان ImageEffects تحت بسته ی com.PRG. imageeffects نام گذاری کنید. زمان ایجاد این برنامه مطمئن شوید که Target SDKو Compile With در آخرین ورژن Android SDKهستند تا از سطوح بالاتر API استفاده کنید.
-
فایل src/MainActivity.java را برای افزودن کدهای لازم تغییر دهید.
-
res/layout/activity_main را تغییر دهید تا مولفه های XML مربوطه را اضافه کنید.
- برنامه را اجرا کنید، یک دستگاه اجرایی اندروید انتخاب کرده و برنامه را روی آن نصب کنید و سپس نتایج را بررسی کنید.
می توانید محتوای فایل MainActivity را مشاهده کنید.
package com.PRG.ImageEffect;
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 را مشاهده می کنید.
<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/logo"/>
<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 version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.PRG.ImageEffect" >
<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 را روی برنامه نصب می کند و آن را شروع می کند.
- نوشته شده توسط سعید نوشادی
- بازدید: 4715