Mengubah Gambar RGB menjadi Black and White.

Belang Telon | Sebenarnya sih gk ikut-ikutan kelas Pengolahan Citra Digital, tapi berhubung ada temen yang minta di jelasin. mau gk mau jadi ikut nimbrung ma tugasnya. Mengubah Gambar RGB menjadi Black and White.
Setelah tanya sana-sini dan googling. Akhirnya ketemu juga source codenya. Dari hasil tahan mata yang udah 5 watt. Gak sia-sia bisa juga baca codingnya.
Sebenernya cukup simpel juga sih. Pertama-tama kita deklarasikan variable-variable buat simpan nilai warna gambar dan mengambil sample gambar yang mau kita "Jadulkan" jadi Hitam-Putih. Dan pastinya tidak lupa kita Import dulu class-class java yang kita butuhkan.

Langkah selanjutnya buat agar gambar kita bisa memanipulasi dan modifikasi pixel dengan bantuan class yang sudah disediakan oleh java yaitu BufferedImage. Setelah itu, barulah kita bisa rubah nilai pixel menjadi yang kita inginkan. Dan jangan lupa simpan hasil olahan tadi, jika ingin melihat hasilnya.

Berikut source codenya dalam bahasa Java.

import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;


public static void main(String[] args) throws IOEimageception{
    File file= new File("file.jpg");
    int NilaiFile, merah, hijau, biru;
    BufferedImage image = ImageIO.read(file);
    int width = image.getWidth();
    int height = image.getHeight();
    int gray = 0;


    BufferedImage im = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
    WritableRaster raster = im.getRaster();


    for(int i=0; i<image.getWidth(); i++){
        for(int j=0; j<image.getHeight(); j++){
            NilaiFile =  image.getRGB(i,j);
            merah = (NilaiFile & 0image00ff0000) >> 16; //red   = -131072
            hijau = (NilaiFile & 0image0000ff00) >> 8; //green = -16711935
            biru = (NilaiFile & 0image000000ff); //blue  = -16776962
            double tot=merah+hijau+biru;
            if(tot <382){
             image.setRGB(i, j, 0);  //black = 0
            }else if(tot >=382){
             image.setRGB(i, j, -1);  //white = -1
            }
        }
    }
    ImageIO.write(image,"JPG",new File("file_new.jpg"));
}


Sumber :
www.pengolahancitra.com/
http://www.java2s.com

4 comments:

  1. mas punyaq kok setelah di coba di java jadi eror yah..
    .............
    merah = seperti diatas, ini erornya ( ')' expected , ';' expected)
    hijau = seperti diatas, ini erornya ( ')' expected , ';' expected)
    biru = seperti diatas, ini erornya ( ')' expected , ';' expected)
    ...........
    bisa kasih source code lengkapnya mas..send emailq dunk plis :)---->opexsvan46@yahoo.co.id<----
    Thanks A lot be4..

    ReplyDelete
  2. maaf, belum bisa cek programnya. mungkin kalo diganti seperti dibawah ini:
    merah = (NilaiFile >> 16) & 0xFF; //red = -131072
    hijau = (NilaiFile >> 8 ) & 0xFF; //green = -16711935
    biru = (NilaiFile >> 0) & 0xFF; //blue = -16776962

    ditunggu kabar selanjutnya. n makasih udah mau mampir :)

    ReplyDelete
  3. solvedx nanya k forum java jadi begini
    merah = ((NilaiFile & 0x00ff0000)>>16); dst..
    bisa terangin aq ">>16" ini operasi apa y? right shift kah?
    trus tot <382 knapa 382 ini dari mana bro? trus apakah gambar black & white itu sama dengan gambar biner y?thanks msh awam pcd neh

    ReplyDelete
  4. klo menurut yang aq ngerti,
    buat ">>16" : operasi bit shift. (tujuan utama juga belum paham,hehe...)
    untuk range komponen warna merah: 16-23, range komponen warna hijau: 8-15, range komponen warna biru: 0-7.
    kalo nilai 382 ntu total dari warna grey yg sebenarnya 384. (komponen warna grey = r:128,g:128,b:128)

    kalo warna gambar sebenarnya bukan binary, tapi hexadesimal. misal warna putih 0xffffff (gabungan dari nilai rgb). tapi pada java kayaknya gk ada operasi seperti bit shift buat hexadesimal. jadi warna2 tadi diubah dulu jadi biner.

    konsep hitam putih ini kan, "nilai warna lebih banyak dari grey di ubah jadi putih dan nilai warna dibawahnya di ubah jadi hitam"

    #maaf kalo penjelasannya tambah gk jelas :)

    ReplyDelete