Учебники

Android — Эффекты изображения

Android позволяет вам манипулировать изображениями, добавляя различные виды эффектов на изображения. Вы можете легко применять методы обработки изображений для добавления определенных видов эффектов на изображения. Эффекты могут быть яркость, темнота, преобразование оттенков серого и т. Д.

Android предоставляет класс Bitmap для обработки изображений. Это можно найти в разделе android.graphics.bitmap. Есть много способов, с помощью которых вы можете создать экземпляр растрового изображения. Мы создаем растровое изображение из imageView.

private Bitmap bmp;
private ImageView img;
img = (ImageView)findViewById(R.id.imageView1);
BitmapDrawable  abmp = (BitmapDrawable)img.getDrawable();

Теперь мы создадим растровое изображение, вызвав функцию getBitmap () класса BitmapDrawable. Его синтаксис приведен ниже —

bmp = abmp.getBitmap();

Изображение — это не что иное, как двумерная матрица. Таким же образом вы будете обрабатывать растровое изображение. Изображение состоит из пикселей. Таким образом, вы получите пиксели из этого растрового изображения и примените к нему обработку. Его синтаксис выглядит следующим образом —

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 () возвращает пиксель с указанным индексом. Получив пиксель, вы можете легко управлять им в соответствии с вашими потребностями.

Помимо этих методов, есть и другие методы, которые помогают нам лучше управлять изображениями.

Sr.No Метод и описание
1

копия (конфигурация Bitmap.Config, логическое значение isMutable)

Этот метод копирует пиксели этого растрового изображения в новое растровое изображение

2

createBitmap (отображение DisplayMetrics, ширина int, высота int, конфигурация Bitmap.Config)

Возвращает изменяемое растровое изображение с указанной шириной и высотой

3

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

Возвращает изменяемое растровое изображение с указанной шириной и высотой

4

createBitmap (Bitmap src)

Возвращает неизменное растровое изображение из исходного растрового изображения

5

extractAlpha ()

Возвращает новое растровое изображение, которое фиксирует альфа-значения оригинала

6

GetConfig ()

Это метод eturn, что конфиг, иначе вернуть ноль

7

getDensity ()

Возвращает плотность для этого растрового изображения

8

getRowBytes ()

Возвращает количество байтов между строками в пикселях растрового изображения.

9

setPixel (int x, int y, int color)

Запишите указанный цвет в растровое изображение (при условии, что оно изменчиво) в координатах x, y

10

setDensity (int плотность)

Этот метод определяет плотность для этого растрового изображения

копия (конфигурация Bitmap.Config, логическое значение isMutable)

Этот метод копирует пиксели этого растрового изображения в новое растровое изображение

createBitmap (отображение DisplayMetrics, ширина int, высота int, конфигурация Bitmap.Config)

Возвращает изменяемое растровое изображение с указанной шириной и высотой

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

Возвращает изменяемое растровое изображение с указанной шириной и высотой

createBitmap (Bitmap src)

Возвращает неизменное растровое изображение из исходного растрового изображения

extractAlpha ()

Возвращает новое растровое изображение, которое фиксирует альфа-значения оригинала

GetConfig ()

Это метод eturn, что конфиг, иначе вернуть ноль

getDensity ()

Возвращает плотность для этого растрового изображения

getRowBytes ()

Возвращает количество байтов между строками в пикселях растрового изображения.

setPixel (int x, int y, int color)

Запишите указанный цвет в растровое изображение (при условии, что оно изменчиво) в координатах x, y

setDensity (int плотность)

Этот метод определяет плотность для этого растрового изображения

пример

Приведенный ниже пример демонстрирует некоторые эффекты изображения на растровом изображении. Это базовое приложение, которое позволяет вам конвертировать изображение в оттенки серого и многое другое.

Чтобы поэкспериментировать с этим примером, вам нужно запустить его на реальном устройстве.

меры Описание
1 Вы будете использовать Android studio для создания приложения Android в пакете com.example.sairamkrishna.myapplication.
2 Измените файл src / MainActivity.java, чтобы добавить необходимый код.
3 Измените res / layout / activity_main, чтобы добавить соответствующие компоненты XML
4 Запустите приложение и выберите работающее устройство Android, установите на него приложение и проверьте результаты.

Ниже приводится содержание измененного 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);
   }
}

Ниже приводится измененное содержимое файла xml res / layout / activity_main.xml .

Здесь abc указывает на логотип tutorialspoint.com

<?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 во время настройки среды. Чтобы запустить приложение из студии Android, откройте один из файлов деятельности вашего проекта и нажмите «Выполнить». Eclipse Run Icon значок с панели инструментов. Android-студия устанавливает приложение на AVD и запускает его, и, если все в порядке с настройками и приложением, оно отобразится в следующем окне эмулятора —

Anroid Image Effects Tutorial

Теперь, если вы посмотрите на экран вашего устройства, вы увидите изображение андроида вместе с тремя кнопками.

Теперь просто выберите серую кнопку, которая преобразует ваше изображение в оттенки серого и обновит пользовательский интерфейс. Это показано ниже —

Anroid Image Effects Tutorial

Теперь нажмите на яркую кнопку, которая добавит некоторое значение каждому пикселю изображения и, таким образом, создаст иллюзию яркости. Это показано ниже —

Anroid Image Effects Tutorial

Теперь нажмите на темную кнопку, которая вычитает некоторое значение для каждого пикселя изображения и, таким образом, создает иллюзию темноты. Это показано ниже —

Anroid Image Effects Tutorial

Теперь нажмите на красную кнопку, которая вычтет некоторое значение для каждого пикселя изображения и, таким образом, создает иллюзию темноты. Это показано ниже —

Anroid Image Effects Tutorial

Теперь нажмите на зеленую кнопку, которая вычтет некоторое значение для каждого пикселя изображения и, таким образом, создаст иллюзию темноты. Это показано ниже —

Anroid Image Effects Tutorial

Теперь нажмите на синюю кнопку, которая вычитает некоторое значение для каждого пикселя изображения и, таким образом, создает иллюзию темноты. Это показано ниже —