کاربرد effect برای تصاویر در اندروید
کاربرد افکت برای image ها در اندروید
اندروید کلاس 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 میگیریم و فرآیند مورد نظر را روی آن به کار می بریم.
سینتکس آن مانند زیر می باشد .
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 مشخص شده را برمی گردانند. (return می کند)
هنگامی که پیکسل ها را دریافت می کنیم ، دست کاری و تغییر روی آن بسیار ساده خواهد بود.
بجز متد های توضیح داده شده در بالا ، متد های دیگری نیز وجود دارد که در افکت دادن به تصاویر می توانند مفید باشند ؛ این متد ها به شرح زیر می باشند :
(copy(Bitmap.Config config, boolean isMutable :
این متد ، پیکسل های bitmap را در یک bitmap جدید کپی می کند.
(createBitmap(DisplayMetrics display, int width, int height, Bitmap.Config config :
بیت مپی را نشان می دهد که عرض و ارتفاع آن قابل تغییر می باشند.
(createBitmap(int width, int height, Bitmap.Config config :
این متد بیت مپی را نشان می دهد که عرض و ارتفاع آن قابل تغییر می باشند.
(createBitmap(Bitmap src :
این متد یک بیت مپ غیر قابل تغییر از بیت مپ منبع (source bitmap) باز می گرداند.
()extractAlpha : یک بیت مپ جدید که حاوی مقادیر اورجینال بیت مپ می باشد را باز می گرداند.
()getConfig : این متد config را باز می گرداند ، اگر config موجود نباشد null را بر می گرداند.
()getDensity : این متد چگالی bitmap را بر می گرداند.
()getRowBytes : این متد تعداد بایت های بین ردیف های پیکسل های بیت مپ را باز می گرداند
(setPixel(int x, int y, int color : رنگ های مشخص شده در بیت مپ (با فرض اینکه قابل تغییر باشند) را به جای ایکس و ایگرگ بنویسید .
( setDensity(int density : این متد چگالی را برای بیت مپ مشخص می کند.
مثال :
مثال زیر افکت های تصاویر (image effect) را روی بیت مپ ها نشان می دهد . این مثال تصویر را سیاه و سفید می کند.
برای تست این مثال به یک دستگاه واقعی نیاز است .
- برای ایجاد یک برنامه ی اندروید از Android studio تحت پکیج com.example.sairamkrishna.myapplication استفاده کنید .
- فایل src/MainActivity.java را برای افزودن کد لازم تغییر دهید.
- res/layout/activity_main را برای افزودن کامپونن های XML تغییر هید.
- برنامه را اجرا کرده و یک دستگاه اجرایی اندروید انتخاب کنید و برنامه را روی آن نصب کنید، سپس نتایج را بررسی کنید.
محتوای تغییر یافته ی 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);
}
}
ادامه مطلب در لینک زیر:
استفاده از افکت ها در تصاویر در اندروید
مرجع آموزش های اندروید :
دیدگاه تان را بنویسید