Thursday, July 11, 2019

Tugas UAS Mobile Programming (Azwin Anggara - 181021400109)

1. Deskripsi Singkat Aplikasi

Kali ini saya akan membuat aplikasi Galeri Anime sederhana, di Galeri ini terdapat Image Anime, Music Anime,dan Video Anime menggunakan Program Eclipse Juno. Disini Saya membuat 16 file activity dan 16 file xml, Aplikasi ini nantinya terdiri dari :

  • Welcome
  • Login
  • About Me
  • Images Anime
  • Music Anime
  • Video Anime
File Activity
  1. AnimeImages.java
  2. AnimeImagesAdapter.java
  3. AnimeMusic.java
  4. AnimeVideo.java
  5. BlackCloverVideo.java
  6. DigimonVideo.java
  7. FairyTailVideo.java
  8. FaithSong.java
  9. GrandBlueSong.java
  10. GurengeSong.java
  11. KibouNoUta.java
  12. KimetsunoYaibaVideo.java
  13. Login.java
  14. MainActivity.java
  15. MenuActivity.java
  16. NarutoShippudenVideo.java
  17. NeverGiveUpSong.java
  18. OnePieceVideo.java
  19. PoweroftheDreamSong.java
  20. RiseSong.java
  21. ShingekinoKyojinVideo.java
  22. ViewAnimeImages.java
File XML
  1. activity_anime_images
  2. activity_anime_images_adapter
  3. activity_anime_music
  4. activity_anime_video
  5. activity_black_clover_video
  6. activity_digimon_video
  7. activity_fairy_tail_video
  8. activity_faith_song
  9. activity_grand_blue_song
  10. activity_gurenge_song
  11. activity_kibou_no_uta_song
  12. activity_kimetsuno_yaiba_video
  13. activity_login
  14. activity_main
  15. activity_menu
  16. activity_naruto_shippuden_video
  17. activity_never_give_up_song
  18. activity_one_piece_video
  19. activity_powerofthe_dream_song
  20. activity_rise_song
  21. activity_shingekino_kyojin_video
  22. activity_view_anime_images

2. Create New Project

Open eclipse > klik File > New > Others kemudian pilih android > android application project lalu beri nama project "Azwin Anggara_ 181021400109"(disesuaikan) > tentukan target sdk nya> pilih Blank Activity > lanjutkan sampai dengan finish.

3. Buat 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:background="@drawable/saitama" >

    <Button
        android:id="@+id/btnLogin"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="14dp"
        android:layout_marginTop="17dp"
        android:background="@color/Blue"
        android:text="Login"
        android:textColor="@color/White"
        android:typeface="serif" />

    <Button
        android:id="@+id/btnAboutMe"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/btnLogin"
        android:layout_alignBottom="@+id/btnLogin"
        android:layout_alignParentRight="true"
        android:layout_marginRight="14dp"
        android:background="@color/Blue"
        android:text="About Me"
        android:textColor="@color/White"
        android:typeface="serif" />

</RelativeLayout>

Graphic Layout activity_main



activity_login.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:background="@drawable/koro" >

    <EditText
        android:id="@+id/txtUsername"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="112dp"
        android:ems="10" />

    <TextView
        android:id="@+id/textPassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/txtUsername"
        android:layout_marginTop="21dp"
        android:text="Password"
        android:typeface="serif" />

    <EditText
        android:id="@+id/txtPassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textPassword"
        android:ems="10"
        android:inputType="textPassword" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/btnLogin"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/txtPassword"
        android:layout_marginTop="44dp"
        android:background="@color/Gold"
        android:text="Login"
        android:textColor="@color/White"
        android:typeface="serif" />

    <Button
        android:id="@+id/btnClose"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/btnLogin"
        android:layout_alignBottom="@+id/btnLogin"
        android:layout_centerHorizontal="true"
        android:background="@color/Gold"
        android:text="Close"
        android:textColor="@color/White"
        android:typeface="serif" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginBottom="23dp"
        android:src="@drawable/koro" />

    <TextView
        android:id="@+id/textUsername"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/txtUsername"
        android:layout_alignParentLeft="true"
        android:layout_marginBottom="52dp"
        android:text="Username"
        android:typeface="serif" />

</RelativeLayout>


Graphic Layout activity_login



activity_menu.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" >

     <TabHost
         android:id="@android:id/tabhost"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_alignParentLeft="true"
         android:layout_alignParentTop="true" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >

            <TabWidget
                android:id="@android:id/tabs"
                style="@color/Grey"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

            </TabWidget>

            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="match_parent"
                android:layout_height="match_parent" >

                <LinearLayout
                    android:id="@+id/tab1"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" >
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/tab2"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" >
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/tab3"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" >

                </LinearLayout>
            </FrameLayout>
        </LinearLayout>
    </TabHost>

</RelativeLayout>


Graphic Layout activity_menu



activity_anime_images.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_followed_top"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:weightSum="1"
    android:orientation="vertical"
    >
        <GridView
            android:id="@+id/gridview_followed"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:columnWidth="90dp"
            android:numColumns="auto_fit"
            android:verticalSpacing="10dp"
            android:horizontalSpacing="10dp"
            android:stretchMode="columnWidth"
            android:gravity="center"
            >
        </GridView>
</LinearLayout>

Graphic Layout activity_anime_images



activity_anime_music.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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
    
    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >

    </ListView>

</RelativeLayout>


Graphic Layout activity_anime_music




activity_anime_video.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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
    
    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >

    </ListView>

</RelativeLayout>


Graphic Layout activity_anime_video


activity_anime_images_adapter.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" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_world"
        tools:context=".AnimeImagesAdapter" />

</RelativeLayout>

Graphic Layout activity_anime_images_adapter



activity_view_anime_images.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 
    <ImageView
        android:id="@+id/ViewAnimeImages"
        android:layout_width="wrap_content"
        android:layout_height="0dip"
        android:contentDescription="gambar tunggal"
        android:layout_gravity="center_horizontal|center_vertical"
        android:layout_weight="1"/>

    <Button
        android:id="@+id/btnBack"
        android:layout_width="120dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal|center_vertical"
        android:background="@color/Gold"
        android:text="Back"
        android:textColor="@color/White"
        android:typeface="serif" />
 
</LinearLayout>


Graphic Layout activity_view_anime_images




activity_anime_rise_song.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:background="@drawable/tate_no_yuusha" >

     <TextView
         android:id="@+id/textView1"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentTop="true"
         android:layout_centerHorizontal="true"
         android:layout_marginTop="24dp"
         android:text="Rise by MADKID"
         android:textSize="20sp"
         android:typeface="serif" />

    <ImageButton
       android:id="@+id/stop"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignTop="@+id/play"
       android:layout_marginLeft="22dp"
       android:layout_toRightOf="@+id/play"
       android:src="@drawable/stop" />

    <ImageButton
       android:id="@+id/play"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignTop="@+id/pause"
       android:layout_centerHorizontal="true"
       android:src="@drawable/play" />

    <ImageButton
       android:id="@+id/pause"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_below="@+id/textView1"
       android:layout_marginRight="18dp"
       android:layout_marginTop="112dp"
       android:layout_toLeftOf="@+id/play"
       android:src="@drawable/pause" />

     <Button
         android:id="@+id/btnBack"
         android:layout_width="120dp"
         android:layout_height="wrap_content"
         android:layout_alignParentBottom="true"
         android:layout_centerHorizontal="true"
         android:layout_marginBottom="19dp"
         android:background="@color/Gold"
         android:text="Back"
         android:textColor="@color/White"
         android:typeface="serif" />

</RelativeLayout>


Graphic Layout activity_anime_rise_song




activity_digimon_video.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:background="@drawable/digimon" >

    <MediaController
        android:id="@+id/MediaController01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
    </MediaController>
   
     <Button
        android:id="@+id/btnBack"
        android:layout_width="120dp"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="19dp"
        android:background="@color/Gold"
        android:text="Back"
        android:textColor="@color/White" />

     <TextView
         android:id="@+id/textView1"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentLeft="true"
         android:layout_alignParentTop="true"
         android:layout_marginTop="62dp"
         android:text="Official Trailer Digimon Adventure - Last Evolution Kizuna (Movie)"
         android:textSize="20sp"
         android:typeface="serif" />

     <VideoView
         android:id="@+id/videoView1"
         android:layout_width="380dp"
         android:layout_height="200dp"
         android:layout_alignParentLeft="true"
         android:layout_below="@+id/textView1"
         android:layout_marginTop="22dp" />

</RelativeLayout>


Graphic Layout activity_digimon_video



4. Buat Source Code


MainActivity.java

package com.uas.azwin.anggara_181021400109;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;

public class MainActivity extends Activity implements OnClickListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.btnLogin).setOnClickListener(this);
        findViewById(R.id.btnAboutMe).setOnClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    public void onClick(View v) {
    // TODO Auto-generated method stub
    if (v.getId()==R.id.btnLogin)
    {
    Intent Login = new Intent(this, Login.class);
    startActivity(Login);
   
    if (v.getId()==R.id.btnAboutMe)
    {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage("Gallery Application Made in :\n" +
                        "\n" +
                        "Nama : Azwin Anggara\n" +
                        "NIM    : 181021400109\n" +
                        "Kelas  : 06TPLP003\n" +
                        "Phone : 085883693159")
                              .setCancelable(false)
                              .setPositiveButton("OK",
                                          new DialogInterface.OnClickListener() {
                                                public void onClick(DialogInterface dialog,
                                                            int id) {
                                                      dialog.cancel();
                                                }
                                          });
       AlertDialog judul = builder.create();
       judul.setTitle("About Me");
       judul.setIcon(R.drawable.koro);
       judul.show();

   

    }}


Login.java

package com.uas.azwin.anggara_181021400109;


import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.Toast;

public class Login extends Activity implements OnClickListener{

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        findViewById(R.id.btnLogin).setOnClickListener(this);
        findViewById(R.id.btnClose).setOnClickListener(this);    
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_login, menu);
        return true;
    }
    public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()){
    case R.id.btnLogin:
    EditText userNameEditText = (EditText) findViewById(R.id.txtUsername);
    EditText passwordEditText = (EditText) findViewById(R.id.txtPassword);
   
    String userName = userNameEditText.getText().toString();
    String password = passwordEditText.getText().toString();
   
    if (userName.equals("") || password.equals("")){
    Toast.makeText(this, "User name dan password harus diisi", Toast.LENGTH_LONG).show();
    } else {
    if (userName.equalsIgnoreCase("azwin") && password.equalsIgnoreCase("anggara")){
   
    Intent tab = new Intent(this, MenuActivity.class);
    startActivity(tab);
    } else {
    Toast.makeText(this, "User name atau password salah", Toast.LENGTH_LONG).show();
    }
    }
    break;
    case R.id.btnClose:
    System.exit(0);
    }
    }
}


MenuActivity.java

package com.uas.azwin.anggara_181021400109;

import android.os.Bundle;
import android.app.Activity;
import android.app.TabActivity;
import android.content.Intent;
import android.view.Menu;
import android.widget.TabHost;

public class MenuActivity extends TabActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);
        Intent intent;
        TabHost tabHost = getTabHost();
        TabHost.TabSpec spec;
        
        intent = new Intent().setClass(this, AnimeImages.class);
        spec = getTabHost().newTabSpec("Anime Images").setIndicator("Anime Images").setContent(intent);
        tabHost.addTab(spec);
        
        intent = new Intent().setClass(this, AnimeMusic.class);
        spec = getTabHost().newTabSpec("Anime Music").setIndicator("Anime Music").setContent(intent);
        tabHost.addTab(spec);
        
        intent = new Intent().setClass(this, AnimeVideo.class);
        spec = getTabHost().newTabSpec("Anime Video").setIndicator("Anime Video").setContent(intent);
        tabHost.addTab(spec);        
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_menu, menu);
        return true;
    }
}


AnimeImages.java

package com.uas.azwin.anggara_181021400109;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class AnimeImages extends Activity implements OnItemClickListener, OnClickListener{

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_anime_images);
        GridView gridView = (GridView) findViewById(R.id.gridview_followed);
        gridView.setAdapter(new AnimeImagesAdapter (this));
        gridView.setOnItemClickListener(this);
    }

    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        // TODO Auto-generated method stub
        Toast.makeText(AnimeImages.this, "You're Clicked" +position, Toast.LENGTH_SHORT).show();
        Intent i = new Intent(this, ViewAnimeImages.class);
        Bundle b = new Bundle();
        b.putInt("posisi", position);
        i.putExtras(b);
        startActivity(i);
    }
 
    public void onClick(View v) {
        // TODO Auto-generated method stub
    }
}


AnimeImagesAdapter.java

package com.uas.azwin.anggara_181021400109;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

public class AnimeImagesAdapter extends BaseAdapter {


private Context mContext;
 
    public AnimeImagesAdapter(Context c)
    {
        mContext = c;
    }
 
    public static Integer[] mThumbIds =
        {
            //Gambar-gambar yang ada disimpan dalam array
 
R.drawable.shin, R.drawable.tanjirou,
R.drawable.natsu, R.drawable.naruto,
R.drawable.saitama, R.drawable.meliodas,
R.drawable.luffy, R.drawable.koro,
R.drawable.naofumi, R.drawable.luffy,
R.drawable.levi, R.drawable.shin,
R.drawable.koro, R.drawable.tanjirou,
R.drawable.meliodas, R.drawable.levi,
R.drawable.naruto, R.drawable.natsu,
R.drawable.tanjirou, R.drawable.saitama,
R.drawable.shin, R.drawable.naofumi
        };
 
    public int getCount() {
        // Jumlah total gambar
        return mThumbIds.length;
    }
 
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }
 
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }
 
    public View getView(int position, View convertView, ViewGroup parent) {
        // Mengambil satu gambar dari gallery
        ImageView imageView;
if (convertView == null) {  // if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(mThumbIds[position]);
return imageView;
    }
}


ViewAnimeImages.java

package com.uas.azwin.anggara_181021400109;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;

public class ViewAnimeImages extends Activity  implements OnClickListener{

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_anime_images);
        findViewById(R.id.btnBack).setOnClickListener(this);
      
        int imId = this.getIntent().getExtras().getInt("posisi");
        ImageView iv = (ImageView) findViewById(R.id.ViewAnimeImages);
        int image = AnimeImagesAdapter.mThumbIds[imId];
        iv.setImageResource(image);
        
        
    }


public void onClick(View v) {
// TODO Auto-generated method stub
if (v.getId()==R.id.btnBack)
{
Intent Back = new Intent(this, MenuActivity.class);
startActivity(Back);
}
}


AnimeMusic.java

package com.uas.azwin.anggara_181021400109;

import android.os.Bundle;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class AnimeMusic extends Activity {
ListView LV;
String [] Music ={"Faith by MADKID", "Grand Blue", "Gurenge", "Kibou no Uta","Never Give Up!","Power of the Dream","Rise by MADKID"};
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_anime_music);
 LV=(ListView) findViewById(R.id.listView1);
        
        ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,Music);
        LV.setAdapter(adapter);
        LV.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        
       
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
        // TODO Auto-generated method stub
        int itemke=arg2;
        String itemText=(String) LV.getItemAtPosition(arg2);
        Toast.makeText(getBaseContext(), "You're Clicked " +itemText, Toast.LENGTH_LONG).show();
        if(itemText.equals("Faith by MADKID")){
            Intent DipilihIntent=new Intent(arg0.getContext(),FaithSong.class);
            startActivityForResult(DipilihIntent, 0);
            }
        if(itemText.equals("Grand Blue")){
            Intent DipilihIntent=new Intent(arg0.getContext(),GrandBlueSong.class);
            startActivityForResult(DipilihIntent, 0);
            }
        if(itemText.equals("Gurenge")){
            Intent DipilihIntent=new Intent(arg0.getContext(),GurengeSong.class);
            startActivityForResult(DipilihIntent, 0);
            }
        if(itemText.equals("Kibou no Uta")){
            Intent DipilihIntent=new Intent(arg0.getContext(),KibouNoUtaSong.class);
            startActivityForResult(DipilihIntent, 0);
            }
        if(itemText.equals("Never Give Up!")){
            Intent DipilihIntent=new Intent(arg0.getContext(),NeverGiveUpSong.class);
            startActivityForResult(DipilihIntent, 0);
            }
        if(itemText.equals("Power of the Dream")){
            Intent DipilihIntent=new Intent(arg0.getContext(),PoweroftheDreamSong.class);
            startActivityForResult(DipilihIntent, 0);
            }
        if(itemText.equals("Rise by MADKID")){
            Intent DipilihIntent=new Intent(arg0.getContext(),RiseSong.class);
            startActivityForResult(DipilihIntent, 0);
            }
        }
        }) ;

        }
        

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_anime_music, menu);
        return true;
    }
}


RiseSong.java

package com.uas.azwin.anggara_181021400109;

import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;

public class RiseSong extends Activity implements  OnClickListener, OnCompletionListener{
ImageButton pause, play, stop;
    MediaPlayer mp;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rise_song);
        findViewById(R.id.btnBack).setOnClickListener(this);
        pause = (ImageButton)findViewById(R.id.pause);
        play = (ImageButton)findViewById(R.id.play);
        stop = (ImageButton)findViewById(R.id.stop);
    
    pause.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
               // TODO Auto-generated method stub
               pause();
            }
        });
      
        play.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
           // TODO Auto-generated method stub
              play();
           }
        });

        stop.setOnClickListener(new View.OnClickListener() {
        
           public void onClick(View v) {
           // TODO Auto-generated method stub
              stop();
           }
        });

        setup();
    }

    @Override public void onDestroy() {
        super.onDestroy();
        if (stop.isEnabled()){
           stop();
        }
     }

     public void onCompletion(MediaPlayer mp) {
        stop();
     }

     private void play() {
        mp.start();
        play.setEnabled(false);
        pause.setEnabled(true);
        stop.setEnabled(true);
     }

     private void stop(){
        mp.stop();
        pause.setEnabled(false);
        stop.setEnabled(false);
        try { mp.prepare();
           mp.seekTo(0);
           play.setEnabled(true);
        } catch (Throwable t) {
           goBlooey(t);
        }
     }

     private void pause() {
        mp.pause();
        play.setEnabled(true);
        pause.setEnabled(false);
        stop.setEnabled(true);
     }

     private void loadClip() {
        try { mp=MediaPlayer.create(this, R.raw.rise);
           mp.setOnCompletionListener(this);
        } catch (Throwable t) {
           goBlooey(t);
        }
     }

     private void setup() {
        loadClip();
        play.setEnabled(true);
        pause.setEnabled(false);
        stop.setEnabled(false);
     }

     private void goBlooey(Throwable t) {
        AlertDialog.Builder builder=new AlertDialog.Builder(this);
        builder .setTitle("Exception!") .setMessage(t.toString()) .setPositiveButton("OK", null) .show();
     }
     
    
    public void onClick(View v) {
   
    if (v.getId()==R.id.btnBack)
    {
    Intent back = new Intent(this,MenuActivity.class);
    startActivity(back);
   
    }}
}


AnimeVideo.java

package com.uas.azwin.anggara_181021400109;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class AnimeVideo extends Activity {
ListView LV;
String [] Video ={"Digimon", "Kimetsu no Yaiba", "One Piece", "Naruto Shippuden","Shingeki no Kyojin","Fairy Tail","Black Clover"};
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_anime_video);
        
LV=(ListView) findViewById(R.id.listView1);
        
        ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,Video);
        LV.setAdapter(adapter);
        LV.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        
       
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
        // TODO Auto-generated method stub
        int itemke=arg2;
        String itemText=(String) LV.getItemAtPosition(arg2);
        Toast.makeText(getBaseContext(), "You're Clicked " +itemText, Toast.LENGTH_LONG).show();
        if(itemText.equals("Digimon")){
            Intent DipilihIntent=new Intent(arg0.getContext(),DigimonVideo.class);
            startActivityForResult(DipilihIntent, 0);
        }
        if(itemText.equals("Kimetsu no Yaiba")){
            Intent DipilihIntent=new Intent(arg0.getContext(),KimetsunoYaibaVideo.class);
            startActivityForResult(DipilihIntent, 0);
            }
        if(itemText.equals("One Piece")){
            Intent DipilihIntent=new Intent(arg0.getContext(),OnePieceVideo.class);
            startActivityForResult(DipilihIntent, 0);
            }
        if(itemText.equals("Naruto Shippuden")){
            Intent DipilihIntent=new Intent(arg0.getContext(),NarutoShippudenVideo.class);
            startActivityForResult(DipilihIntent, 0);
            }
        if(itemText.equals("Shingeki no Kyojin")){
            Intent DipilihIntent=new Intent(arg0.getContext(),ShingekinoKyojinVideo.class);
            startActivityForResult(DipilihIntent, 0);
            }
        if(itemText.equals("Fairy Tail")){
            Intent DipilihIntent=new Intent(arg0.getContext(),FairyTailVideo.class);
            startActivityForResult(DipilihIntent, 0);
            }
        if(itemText.equals("Black Clover")){
            Intent DipilihIntent=new Intent(arg0.getContext(),BlackCloverVideo.class);
            startActivityForResult(DipilihIntent, 0);
            }
       
            }
       
        }) ;

        }
        

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_anime_video, menu);
        return true;
    }
}


DigimonVideo.java

package com.uas.azwin.anggara_181021400109;


import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.MediaController;
import android.widget.VideoView;

public class DigimonVideo extends Activity implements  OnClickListener{
private VideoView myvideo;
     private MediaController mediacontroller;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_digimon_video);
        findViewById(R.id.btnBack).setOnClickListener(this);
        VideoView video = (VideoView) findViewById(R.id.videoView1);
        Uri lokasiVideo = Uri.parse("android.resource://" + getPackageName()
                    + "/" + R.raw.digimon);
        myvideo=(VideoView)findViewById(R.id.videoView1);
   
        
                    mediacontroller=new MediaController(this);
        
                    mediacontroller.setMediaPlayer(myvideo);
        
                    myvideo.setMediaController(mediacontroller);
        
                    myvideo.requestFocus();
        
                    myvideo.start();

        video.setVideoURI(lokasiVideo);
        video.start();
  }


public void onClick(View v) {
if (v.getId()==R.id.btnBack)
{
Intent back = new Intent(this,MenuActivity.class);
startActivity(back);
}}
}


5. Hasil Run Aplikasi di HandPhone Saya :)

Tampilan Welcome



Tampilan About Me



Tampilan Login


Tampilan Galeri Images Anime





Tampilan Music Anime



Tampilan Video Anime



Thanks for Attention :)

Thursday, May 23, 2019

Pengolahan Citra (Image Processing)


PENGOLAHAN CITRA (IMAGE PROCESSING)

KECERDASAN BUATAN


Oleh :

       NIM                                           NAMA          
      1.      181021400109                            Azwin Anggara
      2.      161011400026                            Irma Handayani
      3.      181021400122                            Riski Yudi Lesmana
      4.      161011400009                            Tika Liyana


PROGRAM STUDI TEKNIK INFORMATIKA
SEKOLAH TINGGI MANAJEMEN INFORMATIKA & KOMPUTER
ERESHA
TANGERANG SELATAN
2019




KATA PENGANTAR
Puji syukur saya panjatkan kehadirat tuhan yang maha esa, yang atas rahmat-Nya maka saya dapat menyelesaikan penyusunan makalah yang berjudul “ PENGOLAHAN CITRA”. Penulisan laporan ini merupakan salah satu tugas dari matakuliah Kecerdasan Buatan sebelum pelaksanaan UAS.
Dalam Penulisan laporan ini saya merasa masih banyak kekurangan – kekurangan baik pada teknis penulisan maupun materi, mengingat akan kemampuan yang dimiliki saya. Untuk itu kritik dan saran dari semua pihak sangat saya harapkan demi penyempurnaan pembuatan makalah ini.
Dalam penulisan makalah ini saya menyampaikan ucapan terima kasih yang tak terhingga kepada pihak – pihak yang membantu dalam menyelesaikan penulisan makalah ini, khususnya kepada orang tua, keluarga, teman, sahabat, dan semua pihak yang tidak dapat disebutkan satu persatu, yang telah memberikan bantuan dalam penulisan makalah ini.
Akhirnya saya berharap semoga Allah memberikan imbalan yang setimpal pada mereka yang telah memberikan bantuan, dan dapat menjadikan semua bantuan ini ibadah, Amiin Yaa Robbal ‘Alamiin.





Serpong, 23 Mei 2019




BAB I
PENDAHULUAN

1.1.            Latar Belakang
Seiring dengan perkembangan jaman pengetahuan dan teknologi yang pesat sekarang ini, maka kita dihadapkan kepada suatu bentuk permasalahan yang lebih komplek yang menuntut kreativitas. perkembangan teknik tentang image processing yang berkembang dengan pesat saat. ini.terutama pada pengolahan gambar. (Jurnal Ilmiah Pendidikan Informatika Volume 1, Nomor 1, Tahun 2016)
Pengolahan citra digital adalah teknik mengolah citra yang bertujuan memperbaiki kualitas citra agar mudah diinterpretasi oleh manusia atau mesin komputer yang dapat berupa foto maupun gambar bergerak (Sutoyo, 2009). Pengolahan citra digital memiliki beberapa kelebihan, yaitu murah, cepat, dan tidak merusak sampai yang diukur dan mampu mengidentifikasi fisik produk secara obyektif (Somantri, 2010).
Pengolahan citra digital (Digital Image Processing) adalah sebuah disiplin ilmu yang mempelajari tentang teknik-teknik mengolah citra. Citra yang dimaksud disini adalah gambar diam (foto) maupun gambar bergerak (yang berasal dari webcam). Sedangkan digital disini mempunyai maksud bahwa pengolahan citra/gambar dilakukan secara digital menggunakan komputer. Secara matematis, citra merupakan fungsi kontinyu (continue) dengan intensitas cahaya pada bidang dua dimensi. Agar dapat diolah dengan komputer digital, maka suatu citra harus dipresentasikan secara numeric dengan nilai-nilai diskrit. Repersentasi dari fungsi kontinyu menjadi nilai-nilai diskrit disebut digitalisasi citra.
Sebuah citra digital dapat diwakili oleh sebuah matriks dua dimensi f(x,y) yang terdiri dari M kolom dan N baris, dimana perpotongan antara kolom dan baris disebut piksel (pixel = picture element) atau elemen terkecil dari sebuah citra. (Seminar Nasional Teknologi Informasi & Komunikasi Terapan 2011)





BAB II
LANDASAN TEORI
2.1.            Image Processing
Image processing atau pengolahan citra merupakan suatu metode atau teknik yang dapat digunakan untuk memproses citra atau gambar dengan jalan mjemanipulasinjya menjadi suatu data gambar yang diisikan untuk mendapatkan suatu informasi tertentu mengenai obyek yang sedang diamati .dan hal –hal yang perlu diperhatikan sebagai referensi pembuatannya disini diantaranya adalah:
a.       Pengolahan Citra
Citra adalah representasi dua dimentasi untuk bentuk-bentuk fisik nyata tiga dimensi.Citra dalam perwujudan dapat bermacam-macam,mulai dari gambar perwujudan nya dapat bermacam –macam,mulai dari gambar putih pada sebuah foto (yang tidak bergerak)sampai pada gambar warna yang bergerak pada televisi .proses transformasi dari bentuk tiga dimensi ke bentuk dua dimensi untuk menghasilkan citra akan dipengaruhi oleh bermacammacam factor yang mengakibatkan citra penampilan citra suatu benda tidak sama persis dengan bentuk fisik nyatanya.
Faktor-faktor tersebut merupakan efek degradasi atau penurunan kualitas yang dapat berupa rentang kontras benda yang terlalu sempit atau terlalu lebar ,distorsi geometric kekaburan (blur), kekaburan akibat objek citra yang bergerak 9 motion blur,noisw atau gangguan yang disebabkan oleh interferensi pembuat citra ,baik itu pembuat tranduser ,peralatan elektronik maupun peralatan optik .karena pengolahan citra digital dilakukan dengan computer digital ,maka citra yang akan diolah terlebih dahulu ditranformasikan kedalam bentuk besaran – besaran diskrit dari niloai tingkat keabuan pada titik element citra .bentuk dari citra ini disebut citra digital.
Element-element citra digital apabila ditampilkan dalam layer monitor akan menempati sebuah ruang yang disebut Pixel (picture element) .Teknik dan proses untuk mengurangi atau menghilangkan efek degradasi pada citra meliputi teknik perbaikan atau peningkatan citra (image enchancement ) ,restorasi citra (image restoration) dan tranformasi special (special transformation), subyek lain dari pengolahan citra digital diantaranya adalah pengkodean citra ,segmentasi citra(image segmentation ),representasi edan diskripsi citra (image representation and diskription)
b.      Model Citra
Citra disini merupakan matrik dua dimensi dari fungsi intensitas cahaya,karena itu referensi citra menggunakan dua variabelyang menunjuk posisi pada bidang dengan sebuah fungsi intensitas cahaya yang dapat dituliskan sebagai berikut f(x,y).karena cahaya merupakan salah satu bentuk energi yang dalam persamaan 1:
0 < (𝑥𝑥) < ~ (1)
Konversi system koordinat citra diskrit ditunjukkan pada gambar 1:
Gambar 1. Koordinat Citra Diskrit

Citra yang dilihat sehari-hari merupakan cahaya yang direfleksikan sebuah obyek.fungsi.fungsi f(x,y) dapat dilihat sebagai fungsi dengan dua unsur,pertama merupakan besarnya sumber cahaya yang melengkapi pandangan kita terhadap obyek (illumination),kedua merupakan besaran cahaya yang difleksikan oleh obyek dalam pandangan kita (reflectance component).keduanya dituliskan fungsi yang berturut-turut i(x,y) dan r(x,y).merupakan kombinasi perkalian untuk membentuk fungsi f(x.y) yang dapat ditulis dengan persamaan sebagai berikut:
𝑓𝑓(𝑥𝑥, 𝑦𝑦) = 𝑖𝑖(𝑥𝑥, 𝑦𝑦)𝑟𝑟(𝑥𝑥, 𝑦𝑦)
0 < (𝑥𝑥, 𝑦𝑦) < ~
0 < (𝑥𝑥, 𝑦𝑦) < 1
Persamaan diatas menandakan bahwa nilai kerefleksian dibatasi oleh nilai 0(total absorbtion) dan nilai satu (total reflectance)fungsi i(x,y) yang sudah didiskritkan baik koordinat special maupun tingkat kecerahannya.kata continue disini dijelaskan bahwa indek x dan y bernilai bulat .kita dapat menganggap citra digital (berikutnya akan disingkat dengan citra)sebagai matrik dengan ukuran MxN yang baris dan kolomnya menunjukkan titik-titiknya yang diperlihatkan pada persamaan berikut:
Citra yang tidak berwarna atau hitam putih dikenal juga sebagai citra dengan derajat keabuan (citra grey level /greyscale).Derajat keabuan yang dimiliki ini bias beragam mulai deari dua derajat keabuan yaitu(0 dan 1)yang dikenal juga sebagai citra monokrome.16 derajat keabuaan dan 256 derajat kebuan.
Dalam sebuah citra monochrome,sebuah pixel diwakili oleh 1 bit data yang berisikan data tentang derajat keabuan yang dimiliki oleh pixel tersebut.data akan berisi 1 apabila pixel berwarna putih dan akan berisi 0 bila pixel berwarna hitam.
Citra yang dimiliki 16derajat keabuan(mulai dari 0 mewakili warna hitam sampai 15 yang mewakili warna putih) dipresentasikan oleh 4 bit data.sedangkan citra dengan 256 derajat keabuan (nilai 0 mewakili hitam sampai dengan 256 yang mewakili warna putih )dipresentasikan leh 8bit data.
Dalam citra berwarna,jumlah warna bisa beragam mulai dari 16,256,65536 atau 16 juta warna yang masingmasing dipresentasikan oleh 4,8,16 atau 24 bit data untuk setiap pixelnya .warna yang terdiri dari 3 komponen utama yaitu merah (red), nilai hijau (green),dan nilai biru (blue).
c.       Warna RGB dan Gray Scale
Model warna RGB (red, green, blue) mendiskripsikan warna sebagai kombinasi positif dari warna yaitu merah, hijau dan biru sehingga membentuk sebuah warna C dengan persamaan 4:
𝐶𝐶 = 𝑟𝑟𝑟𝑟 + 𝑔𝑔𝑔𝑔 + 𝑏𝑏𝑏𝑏

2.2.Operasi Pengolahan Citra
Operasi - operasi yang dilakukan di dalam pengolahan citra banyak ragamnya. Namun, secara umum, operasi pengolahan citra dapat diklasifikasikan dalam beberapa jenis sebagai berikut:
1.      Perbaikan Kualitas Citra (Image Enhancement).
Jenis operasi ini bertujuan untuk memperbaiki kualitas citra dengan cara memanipulasi parameter-parameter citra. Dengan operasi ini, ciri ciri khusus yang terdapat di dalam citra lebih ditonjolkan.
Contoh - contoh operasi perbaikan citra: 
a.       Perbaikan kontras gelap / terang. 
b.      Perbaikan tepian objek (Edge Enhancement). 
c.       Penajaman (Sharpening). 
d.      pembrian warna semu (Pseudocoloring). 
e.       penapisan derau (noise filtering). 
2.      Pemugaran Citra (Image Restoration).
Operasi ini bertujuan menghilangkan/meminimumkan cacat pada citra. Tujuan pemugaran citra hampir sama dengan operasi perbaikan citra. Bedanya, pada pemugaran citra penyebab degradasi gambar diketahui.
Contoh - contoh operasi Pemugaran Citra: 
a.       Penghilangan Kesamaran (Deblurring). 
b.      Penghilangan Derau (Noise).
3.      Pemampatan Citra (Image Compression). 
Jenis operasi ini dilakukan agar citra dapat direpresentasikan dalam bentuk yang lebih kompak sehingga memerlukan memori yang lebih sedikit. Hal penting yang harus diperhatikan dalam pemampatan adalah citra yang telah dimampatkan harus tetap mempunyai kualitas gambar yang bagus. 
4.      Segmentasi Citra (Image Segmentation). 
Jenis operasi ini bertujuan untuk memecah suatu citra ke dalam beberapa segmen dengan suatu kriteria tertentu. Jenis operasi ini berkaitan erat dengan pengenalan pola. 
5.      Pengorakan Citra (Image Analysis). 
Jenis operasi ini bertujuan menghitung besaran kuantitif dari citra untuk menghasilkan deskripsinya. Teknik pengorakan citra mengekstraksi ciri - ciri tertentu yang membantu dalam identifikasi objek. Proses segmentasi kadangkala diperlukan untuk melokalisasi objek yang diinginkan dari sekelilingnya. 
Contoh-contoh Operasi Pengorakan Citra: 
a.       Pendeteksian tepi Objek (Edge Detection). 
b.      Ekstraksi Batas (Boundary). 
c.       Representasi Daerah (Region).
6.      Rekonstruksi Citra (Image Reconstruction). 
Jenis operasi ini bertujuan untuk membentuk ulang objek dari beberapa citra hasil proyeksi. Operasi rekonstruksi citra banyak digunakan dalam bidang medis. Misalnya beberapa foto rontgen dengan sinar X digunakan untuk membentuk ulang gambar organ tubuh. 





BAB III

PEMBAHASAN


3.1.            Coding
a.      frmPengCitra.vb
Public Class frmPengCitra
    Dim bmap As Bitmap 'deklarasi gambar/image dengan tipe Bitmap
    Dim PicAda As Boolean

    Private Sub OpenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenToolStripMenuItem.Click
        OpenFileDialog1.Filter = "Images|*.GIF;*.TIF;*.JPG;*.BMP"
        OpenFileDialog1.ShowDialog()
        If OpenFileDialog1.FileName = "" Then Exit Sub
        'else
        PicAda = True
        picAwal.Image = Image.FromFile(OpenFileDialog1.FileName)
        picAwal.Width = picAwal.Height * picAwal.Image.Width / picAwal.Image.Height
    End Sub

    Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click
        End
    End Sub

    Private Sub frmUtama_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ProgressBar1.Hide()

Me.WindowState = FormWindowState.Maximized

        PicAda = False
    End Sub

    Private Sub GreyScaleToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GreyScaleToolStripMenuItem.Click
        If PicAda = False Then
            MsgBox("Pilih dulu gambar yang akan diproses", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Error Proses")
            Exit Sub
        End If
        bmap = New Bitmap(picAwal.Image) 'Gambar asli dijadikan gambar Bitmap
        picAwal.Image = bmap
        Dim tempbmp As New Bitmap(picAwal.Image) 'deklarasi gambar Bitmap dari gambar asli untuk diproses
        Dim DX As Integer = 1
        Dim DY As Integer = 1
        Dim Red As Integer, Green As Integer, Blue As Integer, Grey As Integer
        Dim X, Y As Integer
        ProgressBar1.Width = picAwal.Width
        ProgressBar1.Show()
        With tempbmp
            For X = DX To .Height - DX - 1
                For Y = DY To .Width - DY - 1
                    Red = CInt(.GetPixel(Y, X).R) 'ambil nilai warna merah (Red) pada pixel(Y,X)

Green = CInt(.GetPixel(Y, X).G) 'ambil nilai warna hijau (Green) pada pixel(Y,X)
                    Blue = CInt(.GetPixel(Y, X).B) 'ambil nilai warna biru (Blue) pada pixel(Y,X)
                    Grey = (Red + Green + Blue) / 3 'konversi warna pada pixel Y,X ke grey
                    If (Grey < 128) Then
                        Red = 0
                        Green = 0
                        Blue = 0
                    Else
                        Red = 255
                        Blue = 255
                        Green = 255
                    End If
                    bmap.SetPixel(Y, X, Color.FromArgb(Red, Green, Blue)) 'simpan warna baru pada pixel(Y,X)
                Next
                If X Mod 10 = 0 Then
                    picAwal.Invalidate()
                    Me.Text = "Progres Proses Grey Scale : " & Int(100 * X / (picAwal.Image.Height - 2)).ToString & "%"
                    ProgressBar1.Value = Int(100 * X / (picAwal.Image.Height - 2))
                    picAwal.Refresh()
                End If
            Next
        End With
        ProgressBar1.Hide()
        picAwal.Refresh()
        Me.Text = "Pengolahan Citra : Proses Grey Scale berhasil"


End Sub

    Private Sub SaveToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveToolStripMenuItem.Click
        Dim i As Integer
        Dim str As String
        For i = 1 To 1000
            If i < 10 Then str = "Picture_00" & i.ToString & ".jpg"
            If i > 9 And i < 100 Then str = "Picture_0" & i.ToString & ".jpg"
            If i > 99 Then str = "Picture_" & i.ToString & ".jpg"
            If i > 900 Then MsgBox("You Have Over 900 Pictures, Please Check And Delete Unnecesary Ones")
            If Not System.IO.File.Exists(str) Then
                Try
                    picAwal.Image.Save(str, System.Drawing.Imaging.ImageFormat.Jpeg) 'Cropped
                    'PictureBox1.Image.Save(str, System.Drawing.Imaging.ImageFormat.Png)
                    MsgBox("Gambar berhasil di simpan ^_^", MsgBoxStyle.OkOnly, "Save Succes")

                Catch Ex As Exception
                    MsgBox("Could Not Write To Location")
                End Try
                Exit For
            End If
        Next

    End Sub

Private Sub BinerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BinerToolStripMenuItem.Click
        If PicAda = False Then
            MsgBox("Pilih dulu gambar yang akan diproses", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Error Proses")
            Exit Sub
        End If

        bmap = New Bitmap(picAwal.Image) 'Gambar asli dijadikan gambar Bitmap
        picAwal.Image = bmap
        Dim tempbmp As New Bitmap(picAwal.Image) 'deklarasi gambar Bitmap dari gambar asli untuk diproses
        Dim DX As Integer
        Dim DY As Integer
        Dim Red, Green, Blue, Grey As Integer
        Dim X, Y As Integer
        ProgressBar1.Width = picAwal.Width
        ProgressBar1.Show()
        With tempbmp
            For X = DX To .Height - DX - 1
                For Y = DY To .Width - DY - 1
                    Red = CInt(.GetPixel(Y, X).R) 'ambil nilai warna merah (Red) pada pixel(Y,X)
                    Green = CInt(.GetPixel(Y, X).G) 'ambil nilai warna hijau (Green) pada pixel(Y,X)
                    Blue = CInt(.GetPixel(Y, X).B) 'ambil nilai warna biru (Blue) pada pixel(Y,X)
                    Grey = (Red + Green + Blue) / 3 'konversi warna pada pixel Y,X ke grey

                    'proses perubahan ke biner
                    Dim clr As Color = bmap.GetPixel(Y, X)
                    If (Grey < 128) Then
                        Red = 0
                        Green = 0
                        Blue = 0
                    Else
                        Red = 255
                        Blue = 255
                        Green = 255
                    End If
                    bmap.SetPixel(Y, X, Color.FromArgb(Red, Green, Blue)) 'simpan warna baru pada pixel(Y,X)
                Next
                If X Mod 10 = 0 Then
                    picAwal.Invalidate()
                    Me.Text = "Progres Proses Biner : " & Int(100 * X / (picAwal.Image.Height - 2)).ToString & "%"
                    ProgressBar1.Value = Int(100 * X / (picAwal.Image.Height - 2))
                    picAwal.Refresh()
                End If
            Next
        End With
        ProgressBar1.Hide()
        picAwal.Refresh()
        Me.Text = "Pengolahan Citra : Proses Biner berhasil"
    End Sub

Private Sub MBitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MBitToolStripMenuItem.Click
        'untuk m bit
        If PicAda = False Then
            MsgBox("Pilih dulu gambar yang akan diproses", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Error Proses")
            Exit Sub
        End If
        bmap = New Bitmap(picAwal.Image) 'Gambar asli dijadikan gambar Bitmap
        picAwal.Image = bmap
        Dim tempbmp As New Bitmap(picAwal.Image) 'deklarasi gambar Bitmap dari gambar asli untuk diproses
        Dim DX As Integer = 1
        Dim DY As Integer = 1
        Dim Red As Integer, Green As Integer, Blue As Integer, Grey As Integer
        Dim X, Y As Integer
        Dim m As Integer = 2
        Dim Xth As Double
        ProgressBar1.Width = picAwal.Width
        ProgressBar1.Show()
        With tempbmp
            For X = DX To .Height - DX - 1
                For Y = DY To .Width - DY - 1
                    Red = CInt(.GetPixel(Y, X).R) 'ambil nilai warna merah (Red) pada pixel(Y,X)
                    Green = CInt(.GetPixel(Y, X).G) 'ambil nilai warna hijau (Green) pada pixel(Y,X)

Blue = CInt(.GetPixel(Y, X).B) 'ambil nilai warna biru (Blue) pada pixel(Y,X)
                    Grey = (Red + Green + Blue) / 3 'konversi warna pada pixel Y,X ke grey
                    Xth = (2 ^ m) * Int(Grey / 2 ^ m)
                    If (Xth > 256) Then
                        Red = 255
                        Green = 255
                        Blue = 255
                    Else
                        Red = Xth
                        Green = Xth
                        Blue = Xth
                    End If

                    bmap.SetPixel(Y, X, Color.FromArgb(Red, Green, Blue)) 'simpan warna baru pada pixel(Y,X)
                Next
                If X Mod 10 = 0 Then
                    picAwal.Invalidate()
                    Me.Text = "Progres Proses M Bit : " & Int(100 * X / (picAwal.Image.Height - 2)).ToString & "%"
                    ProgressBar1.Value = Int(100 * X / (picAwal.Image.Height - 2))
                    picAwal.Refresh()
                End If
            Next
        End With
        ProgressBar1.Hide()
        picAwal.Refresh()
        Me.Text = "Pengolahan Citra : Proses M Bit berhasil"

    End Sub

    Private Sub BrigthnessToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BrigthnessToolStripMenuItem.Click
        If PicAda = False Then
            MsgBox("Pilih dulu gambar yang akan diproses", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Error Proses")
            Exit Sub
        End If
        bmap = New Bitmap(picAwal.Image) 'Gambar asli dijadikan gambar Bitmap
        picAwal.Image = bmap
        Dim tempbmp As New Bitmap(picAwal.Image) 'deklarasi gambar Bitmap dari gambar asli untuk diproses
        Dim DX As Integer = 1
        Dim DY As Integer = 1
        Dim Red As Integer, Green As Integer, Blue As Integer ',Grey As Integer
        Dim X, Y As Integer
        Dim tb As Integer
        tb = 75
        ProgressBar1.Width = picAwal.Width
        ProgressBar1.Show()
        With tempbmp
            For X = DX To .Height - DX - 1
                For Y = DY To .Width - DY - 1
                    Red = CInt(.GetPixel(Y, X).R) 'ambil nilai warna merah (Red) pada pixel(Y,X)
                    Green = CInt(.GetPixel(Y, X).G) 'ambil nilai warna hijau (Green) pada pixel(Y,X)

Blue = CInt(.GetPixel(Y, X).B) 'ambil nilai warna biru (Blue) pada pixel(Y,X)
                    'Grey = (Red + Green + Blue) / 3 'konversi warna pada pixel Y,X ke grey
                    Red = Red + tb
                    Green = Green + tb
                    Blue = Blue + tb
                    If (Red > 255) Then
                        Red = 255
                    End If
                    If (Blue > 255) Then
                        Blue = 255
                    End If
                    If (Green > 255) Then
                        Green = 255
                    End If
                    bmap.SetPixel(Y, X, Color.FromArgb(Red, Green, Blue)) 'simpan warna baru pada pixel(Y,X)
                Next
                If X Mod 10 = 0 Then
                    picAwal.Invalidate()
                    Me.Text = "Progres Brightness Scale : " & Int(100 * X / (picAwal.Image.Height - 2)).ToString & "%"
                    ProgressBar1.Value = Int(100 * X / (picAwal.Image.Height - 2))
                    picAwal.Refresh()
                End If
            Next
        End With
        ProgressBar1.Hide()
        picAwal.Refresh() 


        Me.Text = "Pengolahan Citra : Proses Brightness berhasil"
    End Sub

    Private Sub ContrastToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ContrastToolStripMenuItem.Click
        If PicAda = False Then
            MsgBox("Pilih dulu gambar yang akan diproses", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Error Proses")
            Exit Sub
        End If
        bmap = New Bitmap(picAwal.Image) 'Gambar asli dijadikan gambar Bitmap
        picAwal.Image = bmap
        Dim tempbmp As New Bitmap(picAwal.Image) 'deklarasi gambar Bitmap dari gambar asli untuk diproses
        Dim DX As Integer = 1
        Dim DY As Integer = 1
        Dim Red, Green, Blue As Integer
        Dim X, Y As Integer
        Dim tc As Integer
        tc = 5
        ProgressBar1.Width = picAwal.Width
        ProgressBar1.Show()
        With tempbmp
            For X = DX To .Height - DX - 1
                For Y = DY To .Width - DY - 1
                    Red = CInt(.GetPixel(Y, X).R) 'ambil nilai warna merah (Red) pada pixel(Y,X)

                    Green = CInt(.GetPixel(Y, X).G) 'ambil nilai warna hijau (Green) pada pixel(Y,X)


Blue = CInt(.GetPixel(Y, X).B) 'ambil nilai warna biru (Blue) pada pixel(Y,X)
                    'Grey = (Red + Green + Blue) / 3 'konversi warna pada pixel Y,X ke grey
                    Red = Red * tc
                    Blue = Blue * tc
                    Green = Green * tc
                    If (Red > 255) Then
                        Red = 255
                    End If
                    If (Blue > 255) Then
                        Blue = 255
                    End If
                    If (Green > 255) Then
                        Green = 255
                    End If
                    bmap.SetPixel(Y, X, Color.FromArgb(Red, Green, Blue)) 'simpan warna baru pada pixel(Y,X)
                Next
                If X Mod 10 = 0 Then
                    picAwal.Invalidate()
                    Me.Text = "Progres Proses contrast : " & Int(100 * X / (picAwal.Image.Height - 2)).ToString & "%"
                    ProgressBar1.Value = Int(100 * X / (picAwal.Image.Height - 2))
                    picAwal.Refresh()
                End If
            Next
        End With
        ProgressBar1.Hide()

        picAwal.Refresh()

Me.Text = "Pengolahan Citra : Proses contrast berhasil"
    End Sub

    Private Sub InversiToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InversiToolStripMenuItem.Click
        If PicAda = False Then
            MsgBox("Pilih dulu gambar yang akan diproses", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Error Proses")
            Exit Sub
        End If
        bmap = New Bitmap(picAwal.Image) 'Gambar asli dijadikan gambar Bitmap
        picAwal.Image = bmap
        Dim tempbmp As New Bitmap(picAwal.Image) 'deklarasi gambar Bitmap dari gambar asli untuk diproses
        Dim DX As Integer
        Dim DY As Integer
        Dim X, Y As Integer
        ProgressBar1.Width = picAwal.Width
        ProgressBar1.Show()
        With tempbmp
            For X = DX To .Height - DX - 1
                For Y = DY To .Width - DY - 1
                    Dim clr As Color = bmap.GetPixel(Y, X)
                    'inversi 8 bit = 255-x
                    clr = Color.FromArgb(255, 255 - clr.R, 255 - clr.G, 255 - clr.B)
                    bmap.SetPixel(Y, X, clr)
                Next
                If X Mod 10 = 0 Then


                    picAwal.Invalidate()
                    Me.Text = "Progres Proses Inversi : " & Int(100 * X / (picAwal.Image.Height - 2)).ToString & "%"
                    ProgressBar1.Value = Int(100 * X / (picAwal.Image.Height - 2))
                    picAwal.Refresh()
                End If
            Next
        End With
        ProgressBar1.Hide()
        picAwal.Refresh()
        Me.Text = "Pengolahan Citra : Proses Inversi berhasil"
    End Sub

    Private Sub NegativeImageToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NegativeImageToolStripMenuItem.Click
        If PicAda = False Then
            MsgBox("Pilih dulu gambar yang akan diproses", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Error Proses")
            Exit Sub
        End If
        bmap = New Bitmap(picAwal.Image) 'Gambar asli dijadikan gambar Bitmap
        picAwal.Image = bmap
        Dim tempbmp As New Bitmap(picAwal.Image) 'deklarasi gambar Bitmap dari gambar asli untuk diproses
        Dim DX As Integer = 1
        Dim DY As Integer = 1

        Dim L As Integer = 100

Dim Red As Integer, Green As Integer, Blue As Integer
        Dim X, Y As Integer
        ProgressBar1.Width = picAwal.Width
        ProgressBar1.Show()
        With tempbmp
            For X = DX To .Height - DX - 1
                For Y = DY To .Width - DY - 1
                    Red = CInt(.GetPixel(Y, X).R) 'ambil nilai warna merah (Red) pada pixel(Y,X)
                    Green = CInt(.GetPixel(Y, X).G) 'ambil nilai warna hijau (Green) pada pixel(Y,X)
                    Blue = CInt(.GetPixel(Y, X).B) 'ambil nilai warna biru (Blue) pada pixel(Y,X)
                    'Grey = (Red + Green + Blue) / 3 'konversi warna pada pixel Y,X ke grey
                    Red = L - Red
                    Blue = L - Blue
                    Green = L - Green
                    If (Red > 255) Then
                        Red = 255
                    ElseIf (Red < 0) Then
                        Red = 0
                    End If
                    If (Blue > 255) Then
                        Blue = 255
                    ElseIf (Blue < 0) Then
                        Blue = 0
                    End If
                    If (Green > 255) Then
                        Green = 255
                    ElseIf (Green < 0) Then

                        Green = 0
                    End If
                    bmap.SetPixel(Y, X, Color.FromArgb(Red, Green, Blue)) 'simpan warna baru pada pixel(Y,X)
                Next
                If X Mod 10 = 0 Then
                    picAwal.Invalidate()
                    Me.Text = "Progres Proses Negative Image : " & Int(100 * X / (picAwal.Image.Height - 2)).ToString & "%"
                    ProgressBar1.Value = Int(100 * X / (picAwal.Image.Height - 2))
                    picAwal.Refresh()
                End If
            Next
        End With
        ProgressBar1.Hide()
        picAwal.Refresh()
        Me.Text = "Pengolahan Citra : Proses Negative Image berhasil"
    End Sub
    Private Sub AboutToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AboutToolStripMenuItem.Click
        AboutPengolahanCitra.Show()
    End Sub
    Private Sub KonvolusiToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    End Sub

    Private Sub Rotasi(ByVal s As RotateFlipType)
        If PicAda = False Then

MsgBox("Pilih dulu gambar yang akan diproses", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Error Proses")
            Exit Sub
        End If
        bmap = New Bitmap(picAwal.Image) 'Gambar asli dijadikan gambar Bitmap
        picAwal.Image = bmap
        bmap.RotateFlip(s)
        picAwal.Image = bmap
    End Sub


    Private Sub RotasiLeftToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RotasiLeftToolStripMenuItem.Click
        Rotasi(RotateFlipType.Rotate270FlipNone)
    End Sub

    Private Sub RotateRightToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RotateRightToolStripMenuItem.Click
        Rotasi(RotateFlipType.Rotate90FlipNone)
    End Sub

    Private Sub ToolStripMenuItem5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem5.Click
        Rotasi(RotateFlipType.Rotate90FlipNone)
    End Sub

    Private Sub ToolStripMenuItem6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem6.Click
        Rotasi(RotateFlipType.Rotate180FlipNone)
    End Sub

    Private Sub ToolStripMenuItem7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem7.Click
        Rotasi(RotateFlipType.Rotate270FlipNone)
    End Sub

    Private Sub PowerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PowerToolStripMenuItem.Click
        If PicAda = False Then
            MsgBox("Pilih dulu gambar yang akan diproses", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Error Proses")
            Exit Sub
        End If
        bmap = New Bitmap(picAwal.Image) 'Gambar asli dijadikan gambar Bitmap
        picAwal.Image = bmap
        Dim tempbmp As New Bitmap(picAwal.Image) 'deklarasi gambar Bitmap dari gambar asli untuk diproses
        Dim DX As Integer = 1
        Dim DY As Integer = 1
        Dim Red As Integer, Green As Integer, Blue As Integer, Grey As Integer
        Dim X, Y As Integer
        Dim C As Integer = 1.5


Dim z As Integer = 1.1
        ProgressBar1.Width = picAwal.Width
        ProgressBar1.Show()
        With tempbmp
            For X = DX To .Height - DX - 1
                For Y = DY To .Width - DY - 1
                    Red = CInt(.GetPixel(Y, X).R) 'ambil nilai warna merah (Red) pada pixel(Y,X)
                    Green = CInt(.GetPixel(Y, X).G) 'ambil nilai warna hijau (Green) pada pixel(Y,X)
                    Blue = CInt(.GetPixel(Y, X).B) 'ambil nilai warna biru (Blue) pada pixel(Y,X)
                    Grey = (Red + Green + Blue) / 3 'konversi warna pada pixel Y,X ke grey
                    Red = C * Red ^ z
                    Green = C * Green ^ z
                    Blue = C * Blue ^ z
                    If (Red > 255) Then
                        Red = 255
                    ElseIf (Red < 0) Then
                        Red = 0
                    End If
                    If (Blue > 255) Then
                        Blue = 255
                    ElseIf (Blue < 0) Then
                        Blue = 0
                    End If
                    If (Green > 255) Then
                        Green = 255
                    ElseIf (Green < 0) Then

                        Green = 0

End If
                    bmap.SetPixel(Y, X, Color.FromArgb(Red, Green, Blue)) 'simpan warna baru pada pixel(Y,X)
                Next
                If X Mod 10 = 0 Then
                    picAwal.Invalidate()
                    Me.Text = "Progres Proses Power of Law n Power : " & Int(100 * X / (picAwal.Image.Height - 2)).ToString & "%"
                    ProgressBar1.Value = Int(100 * X / (picAwal.Image.Height - 2))
                    picAwal.Refresh()
                End If
            Next
        End With
        ProgressBar1.Hide()
        picAwal.Refresh()
        Me.Text = "Pengolahan Citra : Proses Power of Law n Power berhasil"
    End Sub

    Private Sub RootPowerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RootPowerToolStripMenuItem.Click
        If PicAda = False Then
            MsgBox("Pilih dulu gambar yang akan diproses", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Error Proses")
            Exit Sub
        End If
        bmap = New Bitmap(picAwal.Image) 'Gambar asli dijadikan gambar Bitmap
        picAwal.Image = bmap

Dim tempbmp As New Bitmap(picAwal.Image) 'deklarasi gambar Bitmap dari gambar asli untuk diproses
        Dim DX As Integer = 1
        Dim DY As Integer = 1
        Dim Red As Integer, Green As Integer, Blue As Integer, Grey As Integer
        Dim X, Y As Integer
        Dim C As Integer = 1.5
        Dim z As Integer = 1.1
        ProgressBar1.Width = picAwal.Width
        ProgressBar1.Show()
        With tempbmp
            For X = DX To .Height - DX - 1
                For Y = DY To .Width - DY - 1
                    Red = CInt(.GetPixel(Y, X).R) 'ambil nilai warna merah (Red) pada pixel(Y,X)
                    Green = CInt(.GetPixel(Y, X).G) 'ambil nilai warna hijau (Green) pada pixel(Y,X)
                    Blue = CInt(.GetPixel(Y, X).B) 'ambil nilai warna biru (Blue) pada pixel(Y,X)
                    Grey = (Red + Green + Blue) / 3 'konversi warna pada pixel Y,X ke grey
                    Red = C * Red ^ (1 / z)
                    Green = C * Green ^ (1 / z)
                    Blue = C * Blue ^ (1 / z)
                    If (Red > 255) Then
                        Red = 255
                    ElseIf (Red < 0) Then
                        Red = 0
                    End If
                    If (Blue > 255) Then

Blue = 255
                    ElseIf (Blue < 0) Then
                        Blue = 0
                    End If
                    If (Green > 255) Then
                        Green = 255
                    ElseIf (Green < 0) Then
                        Green = 0
                    End If
                    bmap.SetPixel(Y, X, Color.FromArgb(Red, Green, Blue)) 'simpan warna baru pada pixel(Y,X)
                Next
                If X Mod 10 = 0 Then
                    picAwal.Invalidate()
                    Me.Text = "Progres Proses Power of Law n root Power : " & Int(100 * X / (picAwal.Image.Height - 2)).ToString & "%"
                    ProgressBar1.Value = Int(100 * X / (picAwal.Image.Height - 2))
                    picAwal.Refresh()
                End If
            Next
        End With
        ProgressBar1.Hide()
        picAwal.Refresh()
        Me.Text = "Pengolahan Citra : Proses Power of Law n root Power berhasil"
    End Sub

    Private Sub LogaritmikToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LogaritmikToolStripMenuItem1.Click

        If PicAda = False Then
            MsgBox("Pilih dulu gambar yang akan diproses", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Error Proses")
            Exit Sub
        End If
        bmap = New Bitmap(picAwal.Image) 'Gambar asli dijadikan gambar Bitmap
        picAwal.Image = bmap
        Dim tempbmp As New Bitmap(picAwal.Image) 'deklarasi gambar Bitmap dari gambar asli untuk diproses
        Dim DX As Integer = 1
        Dim DY As Integer = 1
        Dim Red As Integer, Green As Integer, Blue As Integer
        Dim X, Y As Integer
        'Dim G As Integer
        Dim C As Integer = 36
        Dim L As Integer = 1.1
        ProgressBar1.Width = picAwal.Width
        ProgressBar1.Show()
        With tempbmp
            For X = DX To .Height - DX - 1
                For Y = DY To .Width - DY - 1
                    Red = CInt(.GetPixel(Y, X).R) 'ambil nilai warna merah (Red) pada pixel(Y,X)
                    Green = CInt(.GetPixel(Y, X).G) 'ambil nilai warna hijau (Green) pada pixel(Y,X)
                    Blue = CInt(.GetPixel(Y, X).B) 'ambil nilai warna biru (Blue) pada pixel(Y,X)
                    'Grey = (Red + Green + Blue) / 3 'konversi warna pada pixel Y,X ke grey
                    Red = C * Math.Log(Red + 1)


Green = C * Math.Log(Green + 1)
                    Blue = C * Math.Log(Blue + 1)
                    If (Red > 255) Then
                        Red = 255
                    ElseIf (Red < 0) Then
                        Red = 0
                    End If
                    If (Blue > 255) Then
                        Blue = 255
                    ElseIf (Blue < 0) Then
                        Blue = 0
                    End If
                    If (Green > 255) Then
                        Green = 255
                    ElseIf (Green < 0) Then
                        Green = 0
                    End If
                    bmap.SetPixel(Y, X, Color.FromArgb(Red, Green, Blue)) 'simpan warna baru pada pixel(Y,X)
                Next
                If X Mod 10 = 0 Then
                    picAwal.Invalidate()
                    Me.Text = "Progres Proses Logaritmik : " & Int(100 * X / (picAwal.Image.Height - 2)).ToString & "%"
                    ProgressBar1.Value = Int(100 * X / (picAwal.Image.Height - 2))
                    picAwal.Refresh()
                End If
            Next
        End With

        ProgressBar1.Hide()

picAwal.Refresh()
        Me.Text = "Pengolahan Citra : Proses Logaritmik berhasil"
    End Sub

    Private Sub InversLogaritmikToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InversLogaritmikToolStripMenuItem.Click
        If PicAda = False Then
            MsgBox("Pilih dulu gambar yang akan diproses", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Error Proses")
            Exit Sub
        End If
        bmap = New Bitmap(picAwal.Image) 'Gambar asli dijadikan gambar Bitmap
        picAwal.Image = bmap
        Dim tempbmp As New Bitmap(picAwal.Image) 'deklarasi gambar Bitmap dari gambar asli untuk diproses
        Dim DX As Integer = 1
        Dim DY As Integer = 1
        Dim Red As Integer, Green As Integer, Blue As Integer
        Dim R, G, B As Integer
        Dim X, Y As Integer
        'Dim G As Integer
        Dim C As Integer = 36
        Dim L As Integer = 120
        ProgressBar1.Width = picAwal.Width
        ProgressBar1.Show()
        With tempbmp
            For X = DX To .Height - DX - 1
                For Y = DY To .Width - DY - 1

                    Red = CInt(.GetPixel(Y, X).R) 'ambil nilai warna merah (Red) pada pixel(Y,X)
                    Green = CInt(.GetPixel(Y, X).G) 'ambil nilai warna hijau (Green) pada pixel(Y,X)
                    Blue = CInt(.GetPixel(Y, X).B) 'ambil nilai warna biru (Blue) pada pixel(Y,X)
                    'Grey = (Red + Green + Blue) / 3 'konversi warna pada pixel Y,X ke grey
                    R = (L - Red + 1)
                    B = (L - Blue + 1)
                    G = (L - Green + 1)
                    If (R <= 0) Then
                        Red = 0
                    Else
                        Red = C * Math.Log(R)
                    End If
                    If (G <= 0) Then
                        Green = 0
                    Else
                        Green = C * Math.Log(G)
                    End If
                    If (B <= 0) Then
                        Blue = 0
                    Else
                        Blue = C * Math.Log(B)
                    End If
                    'Red = C * Math.Log(L - Red + 1)
                    'Green = C * Math.Log(L - Green + 1)
                    'Blue = C * Math.Log(L - Blue + 1)
                    If (Red > 255) Then
                        Red = 255

                    ElseIf (Red < 0) Then
                        Red = 0
                    End If
                    If (Blue > 255) Then
                        Blue = 255
                    ElseIf (Blue < 0) Then
                        Blue = 0
                    End If
                    If (Green > 255) Then
                        Green = 255
                    ElseIf (Green < 0) Then
                        Green = 0
                    End If
                    bmap.SetPixel(Y, X, Color.FromArgb(Red, Green, Blue)) 'simpan warna baru pada pixel(Y,X)
                Next
                If X Mod 10 = 0 Then
                    picAwal.Invalidate()
                    Me.Text = "Progres Proses Logaritmik : " & Int(100 * X / (picAwal.Image.Height - 2)).ToString & "%"
                    ProgressBar1.Value = Int(100 * X / (picAwal.Image.Height - 2))
                    picAwal.Refresh()
                End If
            Next
        End With
        ProgressBar1.Hide()
        picAwal.Refresh()
        Me.Text = "Pengolahan Citra : Proses Logaritmik berhasil"
    End Sub
End Class



b.      AboutPengCitra.vb
Public NotInheritable Class AboutPengolahanCitra
    Private Sub AboutPengCitra_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' Set the title of the form.
        Dim ApplicationTitle As String
        If My.Application.Info.Title <> "" Then
            ApplicationTitle = My.Application.Info.Title
        Else
            ApplicationTitle = System.IO.Path.GetFileNameWithoutExtension(My.Application.Info.AssemblyName)
        End If
        Me.Text = "Aplikasi Pengolahan Citra" 'String.Format("About {0}", ApplicationTitle)
        ' Initialize all of the text displayed on the About Box.
        ' TODO: Customize the application's assembly information in the "Application" pane of the project
        '    properties dialog (under the "Project" menu).
        Me.LabelMataKuliah.Text = "Kecerdasan Buatan" 'My.Application.Info.ProductName
        Me.LabelAplikasi.Text = "Pengolahan Citra" 'My.Application.Info.LabelVersion
        Me.LabelUniversitas.Text = "STMIK Eresha" 'My.Application.Info.Copyright
        Me.LabelTahun.Text = "2019" 'My.Application.Info.CompanyName
    End Sub
    Private Sub OKButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Me.Close()
    End Sub
    Private Sub OKButton_Click_1(sender As Object, e As EventArgs) Handles OKButton.Click
        Me.Close()
    End Sub

End Class



3.1.                Interface









BAB IV
PENUTUP
4.1.            Kesimpulan
Dalam pengolahan image processing dibutuhkan ketepatan dan keakuratan data serta pengetahuan tentang statistika karena pengolahan image ini berhubungan dengan pengolahan data.
Hasil dari penelitian ini yaitu program dapat merubah rotasi image menjadi kiri, kanan, 90º, 180 º, dan 270 º, selain merubah rotasi program ini juga dapat mengkonversi image ke GreyScale, Biner, mBit, Brightness, Contrast, Inversi, Negative Image.

4.2.            Saran
Saran perbaikan sistem untuk mendapatkan akurasi yang lebih tinggi dapat dilakukan dengan pengembangan metode filtering dengan kombinasi operasi opening closing serta filter median agar noise tidak terlihat dan menambahkan analisis tekstur pada pengolahan citra digital.



Daftar Pustaka
Sutoyo. T, Mulyanto. Edy, Suhartono. Vincent, Dwi Nurhayati Oky, Wijanarto, “ Teori Pengolahan Citra Digital ”, Andi Yogyakarta dan UDINUS Semarang, 2009.
Seminar Nasional Teknologi Informasi & Komunikasi Terapan 2011
Jurnal Ilmiah Pendidikan Informatika Volume 1, Nomor 1, Tahun 2016
Jurnal Teknotan Vol. 11 No. 2, Agustus 2017