Showing posts with label soure code. Show all posts
Showing posts with label soure code. Show all posts

Mengubah Gambar RGB menjadi Grayscale

Belang Telon | Di posting sebelumnya sudah ada penjelasan bagaimana cara Konversi atau Mengubah Gambar RGB menjadi Black and WhiteSelanjutnya akan saya berikan contoh source code untuk Konversi atau Mengubah Gambar RGB menjadi Grayscale. Untuk sementara masih menemukan 2 cara mendapatkan warna grayscale. Yang pertama yaitu dari class yang terdapat dalam paket Java, dan yang kedua kita buat sendiri dari hasil pengubahan warna per  pixel. Gak usah lama-lama cuap-cuapnya, langsung saja masuk ke codingnya.

class yang perlu kita import :
import java.awt.image.ColorConvertOp;
import java.awt.image.BufferedImage;
import java.awt.Toolkit;
import java.awt.Image;

       //Fungsi class Java
    ColorConvertOp colorConvert = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
    colorConvert.filter(bi, bi);
    
     
      //Fungsi buatan
     for(int i=0; i<displayImage.getWidth(this); i++){
           for(int j=0; j<displayImage.getHeight(this); j++){
               int warnaGambar =  bi.getRGB(i,j);
               int alpha = (warnaGambar << 24) & 0xFF;
               int r = (warnaGambar >> 16) & 0xFF;
               int g = (warnaGambar >> 8 ) & 0xFF;
               int b = (warnaGambar >> 0) & 0xFF;
               int nilai = (r + g + b) / 3;
               int gray = alpha | nilai << 16 | nilai << 8 | nilai;
               bi.setRGB(i, j, gray);
           }
     }

Yup, jika diperhatikan untuk merubah warna RGB menjadi grayscale cara yang digunakan sama seperti bagaimana cara merubahnya menjadi black nad white. Jika Warna Black and White merubah warna menjadi 2 macam warna (lihat kembali source code merubah warna Black and White), maka pada grayscale jumlah dari pixel RGB yang di dapat akan dibagi menjadi 3.

Sedikit penjelasan untuk Class ColorConvertOp.
Kelas ini digunakan dalam konversi warna pada gambar. Nilai skala warna yang dihasilkan disesuaikan dengan ketepatan tujuan. Color conversion, ColorSpace ICC_Profile atau dapat kita tentukan melalui array dari objek.
RenderingHints, Jika objek ditentukan dalam konstruktor, kita dapat mengontrol konversi warna menggunakan warna rendering hint dan dithering.
Source dan destination dapat menjadi obyek yang sama.

Kalo ada yang kurang jelas, jangan sungkan-sungkan berikan komentar.

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

Grafika Komputer Bressenham, Circle, DDA Line dan Ellipse

Tugas untuk mata kuliah Grafika Komputer pada tengah semester. Membuat program yang mengaplikasikan materi Bressenham, Circle, DDA Line dan Ellipse. Tampilan hasil running program :

Bressenham

Circle

DDA Line

Ellipse
Download link :

Algoritma digital differential analyzer (DDA)

BelangTelon | Prinsip algoritma ini adalah mengambil nilai integer terdekat dengan jalur garis berdasarkan atas sebuah titik yang telah ditentukan sebelumnya(titik awal garis).

Keuntungan utama dari DDA atas Differential analog konvensional analyzer adalah presisi yang lebih besar dari hasil dan kurangnya drift / noise / slip / lash dalam perhitungan. presisi ini hanya dibatasi oleh ukuran register dan hasil accumulated rounding, yang mengakibatkan kesalahan pemotongan / penambahan berulang.

Untuk masalah yang dapat dinyatakan sebagai persamaan diferensial, sebuah DDA dapat menyelesaikannya lebih cepat daripada general purpose computer  seperti personal computer (menggunakan teknologi serupa). Namun pemrograman ulang sebuah DDA untuk memecahkan masalah yang berbeda (atau memperbaiki bug) jauh lebih sulit daripada pemrograman pada general purpose computer . Banyak DDA yang dibuat untuk satu masalah saja dan tidak bisa diprogram ulang tanpa mendesain ulang DDA tersebut.

Algoritma pembentukan garis DDA:
1) Tentukan dua titik yang akan dihubungkan dalam pembentukan garis.
2) Tentukan salah satu titik sebagai awal(x0,y0) dan titik akhir(x1,y1).
3) Hitung dx=x1­x0, dan dy= y1­y0.
4) Tentukan langkah, yaitu dengan cara jarak maksimum jumlah penambahan nilai x maupun nilai y, dengan cara :
*Bila nilai absolut dari dx lebih besar dari absolut dy, maka langkah= absolut dari dx.
*­Bila tidak maka langkah= absolut dari dy
5) Hitung penambahan koordinat pixel yaitu x_increment=dx/langkah, dan
y_increment=dy/langkah
6) Koordinat selanjutnya (x+x_increment, y+y_increment)
7) Posisi pixel pada layar ditentukan dengan pembulatan nilai koordinat tersebut.
8) Ulangi nomor 6 dan 7 untuk menentukan posisi pixel selanjutnya,sampai x=x1
dan y=y1.

Dibawah ini adalah contoh souce code penggunaan DDA Line menggunakan Java.
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;
import javax.swing.JFrame;

public class LineDda extends JPanel {
    private int x0, y0, x1, y1;

    public LineDda() {
    }

    public LineDda(int x0, int y0, int x1, int y1) {
        setX0(x0);
        setY0(y0);
        setX1(x1);
        setY1(y1);
    }
   
    public void paintLine (int x0, int y0, int x1, int y1){
        JFrame frame = new JFrame("Line DDA");
        frame.add(new LineDda(x0, y0, x1, y1));
        frame.setSize(250, 200);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);       
    }
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
//        g2d.setColor(Color.blue);
        int dx,dy,steps;
        int xInc,yIncrement,x,y;
        dx= x1-x0;
        dy = y1 - y0;
        if (Math.abs(dx) > Math.abs(dy)){
            steps = Math.abs(dx);
        }
        else{
            steps = Math.abs(dy);   
        }
        xInc = dx / steps;
        yIncrement = dy / steps;
        x = x0;
        y = y0;
        g2d.drawLine(Math.round(x), Math.round(y),Math.round(x),Math.round(y));
        for (int i = 0; i< steps ;i++){
            x += xInc;
            y += yIncrement;
            g2d.drawLine(Math.round(x), Math.round(y),Math.round(x),Math.round(y));
        }
       
    }

    public int getX0() {
        return x0;
    }

    public void setX0(int x0) {
        this.x0 = x0;
    }

    public int getY0() {
        return y0;
    }

    public void setY0(int y0) {
        this.y0 = y0;
    }

    public int getX1() {
        return x1;
    }

    public void setX1(int x1) {
        this.x1 = x1;
    }

    public int getY1() {
        return y1;
    }

    public void setY1(int y1) {
        this.y1 = y1;
    }

}

Jika ingin mendapatkan file lengkapnya, silakan download disini

Deret fibonacii dengan sisipan kata

Pada posting kali ini membahas sebuah source code dari C++ yang akan menampilkan sebuah deret fibonacci dengan sisipan sebuah kata. Banyak deret dan posisi dimana sisipan tersebut diletakkan pada deret ditentukan oleh user berupa inputan angka. Pada program ini kata yang menjadi sisipan sudah ditentukan didalam source code. Tetapi jika ingin membuat kata tersebut menjadi sebuat inputan dati user, maka harus melakukan modifikasi dengan mengganti kata yang akan dicetak menjadi sebuah variabel string. 

Tampilan program yang sudah dijalankan akan seperti dibawah ini :


Flowchart dari program tersebut :

Berikut adalah source code C++ untuk tampilan program tersebut :

#include
#include
 

int main(){
       int n,m;
       int a=0;
       int b=1;
       int c; 

       cout<<"masukkan banyak deret : ";
       cin&>>n;
       cout<<"batas sisipan : ";
       cin>>m;
        cout<<b<<" ";
       
for (int i=1;i
            c=a+b;
                 if((i+1)%m==0){
                     cout<<"abu ";
                 }else{
                cout<<<" ";
                 }
            a=b;
            b=c;
        }
        cout<
   getch();
}