18 Eylül 2008

JAR içinden animated gif nasıl okunur?

Şu yazımda bir jar dosyası içinden bir resim dosyasının nasıl okunacağını yazmıştım. Fakat bu yöntemi bir jar içinden animated gif dosyasını okumak için uygularsanız resim animated olmaz statik olur. Animated GIF dosyaları bir kaç tane resmin ard arda sıralanıp tek bir dosya haline getirilmesinden oluştur. Biz bu resimlere frame dersek JAR içinden bu resmi okuduğunuzda ilk frame size getirilir ve siz hareketsiz bir resim görürsünüz. Bunun çözümü ise tabiki tüm frameleri okumaktır. Bu nasıl yapılır:
// İlk önce class loader nesnesi alınır
ClassLoader cl = this.getClass().getClassLoader();
// okunacak animated gif resource olarak okunur
InputStream is = cl.getResourceAsStream("images/animatedpic.gif");
// resim byte olarak okunacağı için bir ByteArrayOutputStream nesnesi oluşturulur
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// -1 okuyana kadar resource'dan byte byte okunur ve output stream'e yazılır.
int r = 0;
while ((r = is.read()) != -1)
baos.write(r);
// Son olarak output stream byte dizisine dönüştürülür ve Image nesnesi oluşturulur.
Image image = Toolkit.getDefaultToolkit().createImage(baos.toByteArray());
// Bu image nesnesini de istediğiniz yerde kullanabilirsiniz.
JLabel label = new JLabel();
label.setIcon(new ImageIcon(image));

6 yorum:

Adsız dedi ki...

Vay Serkanım benim. Yine JAVA olayına dönmüşsün. Bu ne kıvraklıktır dostum böyle. Neyse isimsiz kayramandan selamlar.

Serkan Yıldırım dedi ki...

Artık ne bulursak yazıyoruz, paylaşım için. Sen de paylaşım için ismini versen ben de ona göre sana bir cevap yazsam fena olmaz...

Adsız dedi ki...

Mistik bir yapım var benim. Ayrıca İnsanların bana mistik bir anlam yüklemeleri hoşuma gidiyor. Bu sebeple isimsiz kayraman olarak kalmak benim açımdan daha eğlenceli olacaktır. Neyse tabi tamamen gizem üzerine bir muhabbet kurmak doğru olmayacaktır.Öncelikle ben de senin gibi yazılımcıyım. JAVA ile aram çok iyi olmasa da kendisini severim.

Yazıyla ilgili yorum yapmak gerekirse bahsettiğin problemin benzerini ben de yaşamıştım. Çözüm olarak söz konusu resim dosyalarını jar'ın dışında çıkarıp JAR'a göre bağıl bir dizin içerisine koymuş ve referansını oradan vermiştim. Tabi o zamanlar jar'ın ne olduğu bile yeni yeni idrak edilmekteydi. Jar'ın üstüne çift tıklayıp, uygulamanın çalıştığını görenler çocuk gibi sevinirdi. Zira VB ile uğraşam arkadaşlar ne yapayım ben .bat ile açılan konsoldan çalışan uygulamayı derler bizi sinir ederlerdi. Neyse o zamanlarda yoktu öle sekobey.blogspot falan. Sen de o aralar muhtemelen jar görünce sevindirik olanların arasındaydın.

İsimsiz dedi ki...

Bu arada ben de blog açtım özel birşey yazmak istersen oradan gönderebilirsin.

Serkan Yıldırım dedi ki...

Ben seni tanıdım gibi ama kimliğini ifşa etmeyeyim. Madem isimsiz olarak kendini meçhuller kervanına koyarak bir şeyler yapmak paylaşmak istiyorsun saygı duyarım:) Blog'un hayırlı olsun, güzel paylaşımlar dilerim...

İsimsiz dedi ki...

Beni tanımış olman pek mümkün değil. Neyse niyetimiz saklambaç oynamak değil. Yeni yazılarını beklemekteyiz.