Bu Blogda Ara

29 Kasım 2009 Pazar

Singleton Tasarım Şablonu / Java / JFrame

YouTube video: http://www.youtube.com/watch?v=QPr-J-c49W8







Singleton tasarım şablonu ile Java JFrame örneği.


//
// Ramazan Bellek
// Singleton Tasarım Şablonu
// rbellek.blogspot.com - 2009
// Pencere.java
//

package singleton;

import java.awt.Dimension;

import javax.swing.JFrame;

public class Pencere extends JFrame {

private static Pencere ornek;
private static Object kilit = new Object();

private Pencere()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension boyutlar=java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds(boyutlar.width/2-400,boyutlar.height/2-300,800,600);
}

public static Pencere instance()
{
if (ornek==null)
{
synchronized (kilit) {
if (ornek==null)
{
ornek=new Pencere();
}
}
}
return ornek;
}


public void setBaslik(String baslik)
{
setTitle(baslik);
}

public void goster()
{
setVisible(true);
}
public void gizle()
{
setVisible(false);
}


}



/*
* Ramazan Bellek
* Singleton Tasarım Şablonu
* rbellek.blogspot.com - 2009
* Main.java
*/

package singleton;

public class Main {

public static void main(String[] args)
{
Pencere.instance().setBaslik("Signleton deneme uygulaması");
Pencere.instance().goster();
}

}


15 Kasım 2009 Pazar

Kare Dalga Üretimi / Java

Fourier Açılımı (Detaylı bilgi...) ile kare dalga üretimi yapan java uygulaması. Veri iletişiminde kusursuza yakın kare dalgalar üretiminde kullanılmaktadır. Kare dalganın sinüs bileşenleri çıkartılır ve ardından bu dalgaların birbiriyle toplanmasıyla kare dalgaya yaklaşılabilir. Uygulamayı ilgili dersin ödevi için hazırlamıştım.

Ekran görüntüsü:



Uygulama Kodları:


/*
* Ramazan Bellek
*
* Sakarya University Computer Engineering Department
* Data Communication / Signal Generator Application
*
* File: Grafik.java
*
* 2009
*/

package dataComm;


import java.awt.Color;
import java.awt.Graphics;
import java.util.ArrayList;

import javax.swing.JPanel;

class Koordinat
{
public Koordinat(int x,int y,Color c)
{
this.x=x;
this.y=y;
this.c=c;
}
public int x,y;
public Color c;
}

class Yazi
{
public String yazi;
public Koordinat k;
public Yazi(String yazi, Koordinat k)
{
this.yazi=yazi;
this.k=k;
}
}

public class Grafik extends JPanel {

private ArrayList<Koordinat> koordinatlar;
private ArrayList<Yazi> yazilar;
private Color c;

public Grafik()
{
super();
koordinatlar = new ArrayList<Koordinat>();
yazilar = new ArrayList<Yazi>();
c=Color.BLUE;
}


@Override
public void paint(Graphics g)
{
g.setColor(Color.BLACK);
g.fill3DRect(0, 0, 800, 400, false);

for(Koordinat k : koordinatlar)
{
g.setColor(k.c);
g.fillOval(k.x, k.y, 1, 1); // Windows için g.fillOval(k.x, k.y, 2, 2);
// Mac OSX (Unix) için g.fillOval(k.x, k.y, 1, 1);
}
for(Yazi y : yazilar)
{
g.setColor(y.k.c);
g.drawString(y.yazi, y.k.x, y.k.y);
}

}

public void noktaCiz(int x, int y,Color c)
{
koordinatlar.add(new Koordinat(x,y,c));
}


public void yaziYaz(String yazi, int x, int y, Color c)
{
yazilar.add(new Yazi(yazi,new Koordinat(x,y,c)));
}
public void yenile()
{
repaint();
}

public void temizle()
{
koordinatlar.clear();
}

public void renkSec(Color c)
{
this.c=c;
}
}







/*
* Ramazan Bellek
*
* Sakarya University Computer Engineering Department
* Data Communication / Signal Generator Application
*
* File: Sinyal.java
*
* 2009
*/

package dataComm;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Sinyal extends JFrame{

public static float PI = 3.14159265358979323846f;
public static int freq = 1;
public static int amp = 10;
public static int har = 1;
public static boolean goster = false;
private JButton btnCiz;

private JPanel pnlKontrol;
private JPanel pnlBilgi;
private JPanel pnlTuslar;
private Grafik grafik;
private JTextField tfAmp;
private JLabel lbAmp;
private JTextField tfFreq;
private JLabel lbFreq;
private JTextField tfHar;
private JLabel lbHar;
private JCheckBox cbGoster;
private JLabel lbGoster;
private JLabel lbBilgi;

public static void main(String[] args)
{
new Sinyal("Data Communication / Sinyal Generator");
}

public Sinyal(String baslik)
{
super(baslik);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
Dimension ebat = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds(ebat.width/2-400,ebat.height/2-300,800,600);
setDefaultLookAndFeelDecorated(true);
setLayout(new BorderLayout());

initComponents();


setVisible(true);
}

private void initComponents()
{
pnlKontrol = new JPanel();
pnlKontrol.setPreferredSize(new Dimension(800,200));
pnlKontrol.setLayout(new BorderLayout());
this.getContentPane().add(pnlKontrol,BorderLayout.SOUTH);
pnlTuslar = new JPanel();
pnlTuslar.setPreferredSize(new Dimension(800,100));
pnlTuslar.setLayout(new FlowLayout());
pnlKontrol.add(pnlTuslar,BorderLayout.NORTH);
pnlBilgi = new JPanel();
pnlBilgi.setPreferredSize(new Dimension(800,100));
pnlKontrol.add(pnlBilgi,BorderLayout.SOUTH);

btnCiz = new JButton("ReDraw");
btnCiz.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent arg0) {
try
{
grafik.temizle();
Sinyal.amp=Integer.parseInt(tfAmp.getText());
Sinyal.freq=Integer.parseInt(tfFreq.getText());
Sinyal.har=Integer.parseInt(tfHar.getText());
if (cbGoster.isSelected())
goster=true;
else goster=false;
}catch(Exception e)
{
Sinyal.amp=10;
Sinyal.freq=1;
Sinyal.har=1;
System.err.println(e.getMessage());
}
drawCoordinates();
generateSinus();
}
});

tfAmp=new JTextField(5);
tfAmp.setText("10");
lbAmp=new JLabel("Amplitude:");
pnlTuslar.add(lbAmp);
pnlTuslar.add(tfAmp);

tfFreq=new JTextField(5);
tfFreq.setText("1");
lbFreq = new JLabel("Frequency:");
pnlTuslar.add(lbFreq);
pnlTuslar.add(tfFreq);

lbHar = new JLabel("Harmonics:");
tfHar = new JTextField(5);
tfHar.setText("1");

pnlTuslar.add(lbHar);
pnlTuslar.add(tfHar);

lbGoster = new JLabel("Show sinus elements?");
pnlTuslar.add(lbGoster);

cbGoster = new JCheckBox();
cbGoster.setSelected(false);

pnlTuslar.add(cbGoster);

pnlTuslar.add(btnCiz);

lbBilgi=new JLabel("Ramazan Bellek / 2009");
pnlBilgi.add(lbBilgi);

grafik = new Grafik();
grafik.setPreferredSize(new Dimension(800,400));
grafik.setBackground(Color.BLACK);
drawCoordinates();
generateSinus();
this.getContentPane().add(grafik,BorderLayout.CENTER);

}

private void drawCoordinates()
{
for(int i=0; i<800; i++)
{
grafik.noktaCiz(i, 200,Color.BLUE);
if (i%10==0)
{
grafik.noktaCiz(i+50, 50, Color.BLUE);
grafik.noktaCiz(i+50, 100, Color.BLUE);
grafik.noktaCiz(i+50, 150, Color.BLUE);
grafik.noktaCiz(i+50, 200, Color.BLUE);
grafik.noktaCiz(i+50, 250, Color.BLUE);
grafik.noktaCiz(i+50, 300, Color.BLUE);
grafik.noktaCiz(i+50, 350, Color.BLUE);

}
}
for(int i=0; i<400; i++)
grafik.noktaCiz(50, i,Color.RED);
grafik.yaziYaz("+15", 15, 50, Color.RED);
grafik.yaziYaz("+10", 15, 100, Color.RED);
grafik.yaziYaz("+5", 15, 150, Color.RED);
grafik.yaziYaz("0", 15, 200, Color.RED);
grafik.yaziYaz("-5", 15, 250, Color.RED);
grafik.yaziYaz("-10", 15, 300, Color.RED);
grafik.yaziYaz("-15", 15, 350, Color.RED);
grafik.yenile();

}

private void generateSinus()
{
double toplam=0;
double gecici=0;

for(double i=0.1; i<800; i+=1)
{
for(int j=1; j<=Sinyal.har; j+=2)
{

gecici=4*Sinyal.amp/(Sinyal.PI*j)*10*Math.sin(2*Sinyal.PI*Sinyal.freq*j*i/360);
toplam+=gecici;
if (goster)
grafik.noktaCiz((int)(50+i),(int)(200-gecici),Color.CYAN);

}
grafik.noktaCiz((int)(50+i),(int)(200-toplam),Color.MAGENTA);
toplam=0;
}


grafik.yenile();
}

}

BMP biçimindeki dosyaları okuma / C++ / OOP / openGL

BMP biçimindeki dosyalar, sıkıştırılmadan kullanılan ilkel resim dosyalarıdır. Basit bir kodlama yöntemi olduğundan rahatlıkla okunabilmektedir. Fakat herhangi bir sıkıştırma uygulanmadığı için disk üzerinde çok fazla yer kaplamaktadır. OpenGL ile grafik programlama yapanlar için kolaylık sağlayacağını düşündüğüm bir sınıf yazdım. 24-bit BMP dosyalarını okuyarak piksel bilgilerini hafızaya yükleyebilirsiniz. Önce sınıfa bir göz atalım:


// Sakarya Üniversitesi Bilgisayar Mühendisliği Bölümü
// Ramazan Bellek 2009
// bmpImage Sınıfı Sürüm 1.0
// dosya: BmpLoader.h - 1.0
// http://rbellek.blogspot.com

#ifndef BmpLoader_h
#define BmpLoader_h

#include <windows.h> // Bitmap dosya formatı için gerekli başlık dosyası

class bmpImage
{
private:
int width; // resimin genişliği
int height; // resimin boyu
RGBTRIPLE *imageData; // her bir pikseli tutan 3'lü (kırmızı,mavi,yeşil)
LPCWSTR filename; // okuma yapılacak dosya adresi
HANDLE hfile; // dosyayı işaret eden başlık
DWORD read; // ne kadar veri okudğumuzu tutan değişken
BITMAPFILEHEADER bfh; // dosya başlığı
BITMAPINFOHEADER bih; // bilgileri tutan bölüm
int imagesize; // resmin boyutu (genişlik*boy)
bool status;
void bmpLoad();
void bmpUnload();
public:
bmpImage(LPCWSTR);
bmpImage();
~bmpImage();
void init();
void setFilename(LPCWSTR);
LPCWSTR getFilename();
RGBTRIPLE *getImageData();
int getWidth();
int getHeight();
int getImageSize();
bool getStatus();
void open();
void close();
};

RGBTRIPLE * BmpLoad(LPCWSTR );

#endif



// --------------------------


// Sakarya Üniversitesi Bilgisayar Mühendisliği Bölümü
// Ramazan Bellek 2009
// bmpImage Sınıfı Sürüm 1.0
// dosya: BmpLoader.cpp - 1.0
// http://rbellek.blogspot.com


#include "BmpLoader.h"

bmpImage::bmpImage()
{
init();
}

bmpImage::bmpImage(LPCWSTR filename)
{
this->filename=filename;
init();
open();
}

void bmpImage::init()
{
status=false;
width=0;
height=0;
imagesize=0;
}

void bmpImage::setFilename(LPCWSTR filename)
{
if (!status)
this->filename=filename;
}

LPCWSTR bmpImage::getFilename()
{
if (filename)
return filename;
}

RGBTRIPLE *bmpImage::getImageData()
{
if (status)
return imageData;
else return NULL;
}

int bmpImage::getWidth()
{
if (status)
return width;
else return 0;
}

int bmpImage::getHeight()
{
if (status)
return height;
else return 0;
}

int bmpImage::getImageSize()
{
if (status)
return imagesize;
else return 0;
}

bool bmpImage::getStatus()
{
return status;
}

void bmpImage::open()
{
if (!status)
{
status=true;
bmpLoad();
}
}

void bmpImage::close()
{
if (status)
{
status=false;
bmpUnload();
}
}



void bmpImage::bmpLoad()
{
if (status)
{
hfile = CreateFile(filename,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,NULL,NULL); // dosyamızı okumak üzere açıyoruz
ReadFile(hfile,&bfh,sizeof(bfh),&read,NULL); // başlık bilgilerini dosyadan okuyoruz.
ReadFile(hfile,&bih,sizeof(bih),&read,NULL);
width=bih.biWidth;
height=bih.biHeight;
imagesize = width*height; // resim için hafızada yer ayırmamıza yardımcı olmaktadır
imageData = new RGBTRIPLE[imagesize]; // resmin üzerinde değişiklik yapmak (istiyorsak) için yeni bir dizi oluşuturuyoruz
ReadFile(hfile,imageData,imagesize*sizeof(RGBTRIPLE),&read,NULL); // matrisi okuyalım (pixeller)
CloseHandle(hfile);
}
}

void bmpImage::bmpUnload()
{
imageData=NULL;
}


// ----------------------------------------------

openGL ile örnek kullanımı:

// programınıza #include "BmpLoader.h" eklemeyi unutmayınız.

glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
glClear(GL_COLOR_BUFFER_BIT);
bmpImage *resim=new bmpImage(L"c:\\kirpi.bmp");
resim->swap(); // RGB <-> BGR
RGBTRIPLE *imageData=resim->getImageData();
glBindTexture (GL_TEXTURE_2D, 1);
glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, resim->getWidth(), resim->getHeight(), 0, GL_RGB, GL_UNSIGNED_BYTE, imageData);
glEnable (GL_TEXTURE_2D);
glBindTexture (GL_TEXTURE_2D, 1);
glBegin (GL_QUADS);
glTexCoord2f (0.0f,0.0f);
glVertex3f(-0.5f,-0.5f,0.0f);
glTexCoord2f (1.0f, 0.0f);
glVertex3f(0.5f,-0.5f,0.0f);
glTexCoord2f (1.0f, 1.0f);
glVertex3f(0.5f,0.5f,0.0f);
glTexCoord2f (0.0f, 1.0f);
glVertex3f(-0.5f,0.5f,0.0f);
glEnd ();
glDisable (GL_TEXTURE_2D);
resim->close();


Sonuc:



BMP dosya formatı için http://en.wikipedia.org/wiki/BMP_file_format adresine göz atabilirsiniz.

İyi Çalışmalar