İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır
Zafer Teker
tekzaf@yahoo.com

Midlet'te Bir Resmin Bir Parçasını Ekrana Çizme Örneği

Giriş

Resim

Birden fazla resim dosyasını tek bir resim dosyasında birleştirip, midlette kullanabilirsiniz. Ayrı ayrı olan dosyalar daha fazla yer tutarlar. Tek bir resim dosyası optimize(sıkıştırma,boyutunu azaltma) işelminden geçirildiğinde daha çok sıkıştırılabilmektedir. Ayrı ayrı dosyalar daha az sıkışırlar. Cep telefonlarını hafızaları sınırlı olduğu için resim dosyalarının küçültülmesi önemlidir. Bu örnekte aynı resimde bulunan meteorların bir tanesinin nasıl çizileceği gösterilecektir.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 import javax.microedition.midlet.*;
  2 import javax.microedition.lcdui.*;
  3 public class AllImageTestMidlet extends MIDlet{
  4   Image theAllImage;
  5   public void startApp(){
  6     try{
  7       theAllImage=Image.createImage("/all.png");
  8     }catch(Exception e){e.printStackTrace();}
  9     TestCanvas canvas=new TestCanvas(this,theAllImage);
 10     Display.getDisplay(this).setCurrent(canvas);
 11   }
 12   public void pauseApp(){}
 13   public void destroyApp(boolean b){}
 14   public void exit(){
 15     destroyApp(false);
 16     notifyDestroyed();
 17   }
 18   class TestCanvas extends Canvas implements CommandListener{
 19     private AllImageTestMidlet middlet;
 20     private Command exitCommand=new Command("Exit",Command.EXIT,1);
 21     private Image image;
 22     public TestCanvas(AllImageTestMidlet middlet,Image image){
 23       this.middlet=middlet;
 24       this.image=image;
 25       addCommand(exitCommand);
 26       setCommandListener(this);
 27     }
 28     public void commandAction(Command c, Displayable d){
 29      if(c==exitCommand){
 30        middlet.exit();
 31      }
 32     }
 33     int x=10;
 34     int y=10;
 35     int w=32;
 36     int h=27;
 37     int index=0;
 38     public void paint(Graphics g){
 39       clear(g);
 40       g.setClip(x,y,w,h);
 41       g.drawImage(image,x-w*index,y,Graphics.TOP|Graphics.LEFT);
 42     }
 43     private void clear(Graphics g){
 44       g.setColor(255,255,255);
 45       g.fillRect(0,0,getWidth(),getHeight());
 46       g.setColor(255,255,255);
 47     }
 48   }
 49 }

all.png 4 meteor içeren bir resimdir. Biz bu örnekte bu 4 dört meteordan ilkini çizdik. drawImage() method'u canvas'ın 0,0 noktasına göre verilen bir x,y noktasına image çizmek için kullanılır. Şimdi biz ilk meteoru 10,10 noktasına çizmek istiyoruz. Her meteor'un genişliğinin 32, yüksekliğinin 27 olduğunu biliyoruz. O halde çizmek istediğimiz 10,10 noktasına, genişliği 32 yüksekliği 27 olan bir clip set ederiz. Bunu bir defter sayfasından bir dikdörtgen kesmek gibi düşünebiliriz. Defter sayfasını resmin üzerinde koyarsak resmin sadece sayfanın kesilen kısmına denk gelen kısmı gözükür.

g.setClip(x,y,w,h);

Bu şekilde bir kısım keserseniz kesilen dikdörtgenin dışındaki bölgedeki çizimler gözükmez. Sadece bu dikdörtgen içindeki resimler gözükür. Bundan sonra büyük resmi öyle bir x,y noktasına koymalıyız ki, çizmek istediğimiz ilk meteor clip ettiğimiz dikdörtgenin içine denk gelsin. Bunun için clip ettiğimiz x,y noktasına, büyük resmi çizersek ilk meteor gözükmüş olur. İkinci meteoru görmek istiyorsak büyük resmin x'sini ilk meteor kadar azaltmalıyız. (x-32) (x clip ettiğimiz x) böylece ikinci meteor gözükür. 3. meteoru görmek için büyük resmin x'sini x-2*32, son meteoru görmek için x-3*32 yaparız.

g.drawImage(image,x-w*index,y,Graphics.TOP|Graphics.LEFT);

yukaradaki büyük resmin x'si x-w*index ile verilir. index=0 ise ilk meteor, index=1 ise ikinci meteor gözükür.

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır