Halaman

Subscribe:

Main Menu

Tampilkan postingan dengan label Image Processing. Tampilkan semua postingan
Tampilkan postingan dengan label Image Processing. Tampilkan semua postingan

Rabu, Mei 07, 2008

Image Processing di java

Lanjuatan Artikel Sebelumnya Buat Picture Box di java. dengan komponen yang telah di buat dulu. kita bisa mengambar dengan mudah di java :D. dengan kata lain kita bisa memakainya untuk Image Processing di Java. atau untuk Sound Processing Di java. Artikel yang sekarang kita coba pake untuk Image Processing di java dulu y.. :)

Dulu sudah buat komponen picture box nah di komponen itu bisa kita edit2 atau tambahin nech. tidak hanya nampilin image. misal kita mau gambar garis. tinggal kita tambahin aja method drawLine,draw Oval atau pun lainnya. kita manfaatin tuch method2nya Graphics. antara lain

draw3DRect(int x, int y, int width, int height, boolean raised)
drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)
drawBytes(byte[] data, int offset, int length, int x, int y)
drawChars(char[] data, int offset, int length, int x, int y)
drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer)
drawImage(Image img, int x, int y, ImageObserver observer)
drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer)
drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)
drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer)
drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer)
drawLine(int x1, int y1, int x2, int y2)
drawOval(int x, int y, int width, int height)
drawPolygon(int[] xPoints, int[] yPoints, int nPoints)
drawPolygon(Polygon p)
drawPolyline(int[] xPoints, int[] yPoints, int nPoints)
drawRect(int x, int y, int width, int height)
drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
drawString(AttributedCharacterIterator iterator, int x, int y)
drawString(String str, int x, int y)
fill3DRect(int x, int y, int width, int height, boolean raised)
fillArc(int x, int y, int width, int height, int startAngle, int arcAngle)
fillOval(int x, int y, int width, int height)
fillPolygon(int[] xPoints, int[] yPoints, int nPoints)
fillPolygon(Polygon p)
fillRect(int x, int y, int width, int height)
fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)

dan lain-lain.. tinggal kita butuhnya apa :)

oh iya. yang paling penting dalam image processing itu kan, gimana agar kita bisa dapetin RGB dari pixel tertentu. nah untuk itu ada caranya. tadi saat drawImage. imagenya di simpen dalam variabel aja. eh tunggu dulu. jenis image tadi apa dulu? java.awt.image atau BufferedImage?
kalo jenisnya image buatin method kayak gini untuk dapetin RGB nya

public void handlesinglepixel(int x, int y, int pixel) {
int alpha = (pixel >> 24) & 0xff;
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = (pixel ) & 0xff;
// Deal with the pixel as necessary...
}

public void handlepixels(Image img, int x, int y, int w, int h) {
int[] pixels = new int[w * h];
PixelGrabber pg = new PixelGrabber(img, x, y, w, h, pixels, 0, w);
try {
pg.grabPixels();
} catch (InterruptedException e) {
System.err.println("interrupted waiting for pixels!");
return;
}
if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
System.err.println("image fetch aborted or errored");
return;
}

kalo jenisnya BufferedImage kita bisa langsung dapetin RGBnya dengan
BufferedImage.getRGB(x, y);
kalo jenisnya selain itu. berarti musti kita convert ke jenis ini. image atau BufferedImage :)

udahlah aku rasa itu aja dulu :).

Jumat, April 11, 2008

Buat Picture Box di java :D

menampilkan gambar di java bisa langsung di panel atau desktope pane nya langsung
dengan cara getGraphics nya terus drawImage atau drawLine...
sesuai keinginan anda.. mau make yang mana...

tapi kelemahannya saat kita sudah mengesetnya.. tau menampilkan gambarnya ternyata gambar itu tidak permanent nempel di panel tersebut, dalam arti lain gambar tadi itu hilang saat kita membuka jendela atau window yang lain, saat gambar kita di tumpuki window atau form lain gambarnya hilang :(

nah saya jadi pengen gimana ya agar gambar nya tidak bisa mlenca mlence gitu :(... akhirnya aku dapat caranya..

yaitu dengan menurunkan component panel atau desktopepane atau apa saja yang bisa di setgraphicsnya di java. terus saya mengoverwrite method paintComponent(Graphics g). nah di dalamnya kita bisa menulis dech itu gambar2 yang kita inginkan. dalam arti lain sekarang kita udah punya semacam component PictureBox di java :D. nah tinggal kemahiran kita membuat component kita itu lebih enak dan mudah saat mengeset imagenya :D

image kita ini juga bisa di buat STRETCH, CENTER, SCALE dll lho.. nah itu tergantung coding nya :D
ini sedikit coding yang saya buat :

public void paintComponent(Graphics g) {
super.paintComponent(g);
if (image!=null){
if(layout.equalsIgnoreCase(STRETCH))
g.drawImage( image, 0, 0, getWidth(),getHeight(), null );
else if(layout.equalsIgnoreCase(DEFAULT))
g.drawImage( image, 0, 0, null );
else if(layout.equalsIgnoreCase(CENTER))
g.drawImage(image, (getWidth()-image.getWidth(null))/2, (getHeight()-image.getHeight(null))/2,image.getWidth(null),image.getHeight(null), null );
else if(layout.equalsIgnoreCase(SCALE)){
int imageWidth=image.getWidth(null);
int imageHeight=image.getHeight(null);
int x1=0;
int x2=0;
int y1=0;
int y2=0;
if(imageWidth>imageHeight){
x1=0;
x2=getWidth();
y2=(int)(((float)x2/(float)imageWidth)*imageHeight);
y1=(int)(getHeight()-y2)/2;
}else{
y1=0;
y2=getHeight();
x2=(int)(((float)y2/(float)imageHeight)*imageWidth);
x1=(int)(getWidth()-x2)/2;
}
g.drawImage(image, x1, y1,x2,y2, null );
}


}
}

semoga sukses :D