Android - Bildeffekte

Mit Android können Sie Bilder bearbeiten, indem Sie den Bildern verschiedene Arten von Effekten hinzufügen. Sie können problemlos Bildverarbeitungstechniken anwenden, um bestimmte Arten von Effekten auf Bilder hinzuzufügen. Die Effekte können Helligkeit, Dunkelheit, Graustufenumwandlung usw. Sein

Android bietet eine Bitmap-Klasse für die Verarbeitung von Bildern. Dies kann unter android.graphics.bitmap gefunden werden. Es gibt viele Möglichkeiten, wie Sie Bitmap instanziieren können. Wir erstellen eine Bitmap des Bildes aus der imageView.

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

Jetzt erstellen wir eine Bitmap, indem wir die Funktion getBitmap () der BitmapDrawable-Klasse aufrufen. Die Syntax ist unten angegeben -

bmp = abmp.getBitmap();

Ein Bild ist nichts anderes als eine zweidimensionale Matrix. Genauso werden Sie mit einer Bitmap umgehen. Ein Bild besteht aus Pixeln. Sie erhalten also Pixel aus dieser Bitmap und wenden die Verarbeitung darauf an. Die Syntax lautet wie folgt:

for(int i=0; i<bmp.getWidth(); i++){
   for(int j=0; j<bmp.getHeight(); j++){
      int p = bmp.getPixel(i, j);
   }
}

Die Funktionen getWidth () und getHeight () geben die Höhe und Breite der Matrix zurück. Die Methode getPixel () gibt das Pixel am angegebenen Index zurück. Sobald Sie das Pixel erhalten haben, können Sie es ganz einfach nach Ihren Wünschen bearbeiten.

Abgesehen von diesen Methoden gibt es andere Methoden, mit denen wir Bilder besser bearbeiten können.

Sr.Nr. Methode & Beschreibung
1

copy(Bitmap.Config config, boolean isMutable)

Diese Methode kopiert die Pixel dieser Bitmap in die neue Bitmap

2

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

Gibt eine veränderbare Bitmap mit der angegebenen Breite und Höhe zurück

3

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

Gibt eine veränderbare Bitmap mit der angegebenen Breite und Höhe zurück

4

createBitmap(Bitmap src)

Gibt eine unveränderliche Bitmap aus der Quellbitmap zurück

5

extractAlpha()

Gibt eine neue Bitmap zurück, die die Alpha-Werte des Originals erfasst

6

getConfig()

Dies kann die Konfiguration ändern, andernfalls wird null zurückgegeben

7

getDensity()

Gibt die Dichte für diese Bitmap zurück

8

getRowBytes()

Gibt die Anzahl der Bytes zwischen den Zeilen in den Pixeln der Bitmap zurück

9

setPixel(int x, int y, int color)

Schreiben Sie die angegebene Farbe an der x, y-Koordinate in die Bitmap (vorausgesetzt, sie ist veränderbar)

10

setDensity(int density)

Diese Methode gibt die Dichte für diese Bitmap an

Beispiel

Das folgende Beispiel zeigt einige der Bildeffekte auf der Bitmap. Es enthält eine Basisanwendung, mit der Sie das Bild in Graustufen und vieles mehr konvertieren können.

Um mit diesem Beispiel zu experimentieren, müssen Sie dies auf einem tatsächlichen Gerät ausführen.

Schritte Beschreibung
1 Sie werden Android Studio verwenden, um eine Android-Anwendung unter einem Paket com.example.sairamkrishna.myapplication zu erstellen.
2 Ändern Sie die Datei src / MainActivity.java, um den erforderlichen Code hinzuzufügen.
3 Ändern Sie res / layout / activity_main, um entsprechende XML-Komponenten hinzuzufügen
4 Führen Sie die Anwendung aus und wählen Sie ein laufendes Android-Gerät aus. Installieren Sie die Anwendung darauf und überprüfen Sie die Ergebnisse

Es folgt der Inhalt der geänderten 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);
   }
}

Es folgt der geänderte Inhalt der XML res/layout/activity_main.xml.

Hier zeigt abc das Logo von tutorialspoint.com an
<?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>

Es folgt der Inhalt von AndroidManifest.xml Datei.

<?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>

Versuchen wir, unsere gerade geänderte Anwendung auszuführen. Ich nehme an, Sie hatten Ihre erstelltAVDwährend der Einrichtung der Umgebung. Um die App von Android Studio aus auszuführen, öffnen Sie eine der Aktivitätsdateien Ihres Projekts und klicken Sie in

der Symbolleiste auf das Symbol Ausführen . Android Studio installiert die App auf Ihrer AVD und startet sie. Wenn mit Ihrem Setup und Ihrer Anwendung alles in Ordnung ist, wird das folgende Emulatorfenster angezeigt:

Wenn Sie nun auf den Bildschirm Ihres Geräts schauen, sehen Sie ein Bild von Android zusammen mit drei Schaltflächen.

Wählen Sie nun einfach die graue Schaltfläche, die Ihr Bild in Graustufen konvertiert und die Benutzeroberfläche aktualisiert. Es ist unten gezeigt -

Tippen Sie nun auf die helle Schaltfläche, die jedem Pixel des Bildes einen Wert hinzufügt und so eine Illusion von Helligkeit erzeugt. Es ist unten gezeigt -

Tippen Sie nun auf die dunkle Schaltfläche, die jedem Pixel des Bildes einen Wert abzieht und so eine Illusion von Dunkelheit erzeugt. Es ist unten gezeigt -

Tippen Sie nun auf die rote Schaltfläche, die jedem Pixel des Bildes einen Wert abzieht und so eine Illusion von Dunkelheit erzeugt. Es ist unten gezeigt -

Tippen Sie nun auf die grüne Schaltfläche, die jedem Pixel des Bildes einen Wert abzieht und so eine Illusion von Dunkelheit erzeugt. Es ist unten gezeigt -

Tippen Sie nun auf die blaue Schaltfläche, die jedem Pixel des Bildes einen Wert abzieht und so eine Illusion von Dunkelheit erzeugt. Es ist unten gezeigt -