Thema: ImageLoader

  1. #1

    Registriert seit
    19.12.2011
    Beiträge
    356
    Thanked 164 Times in 101 Posts

    Standard ImageLoader

    Diese Klasse erlaubt es Bilder von einer URL zu laden und zu cachen.
    PHP-Code:
    package KCClient.UI;

    import java.awt.Image;
    import java.net.URL;
    import java.util.HashMap;
    import javax.imageio.ImageIO;

    /**
     *
     * @author DeKaDeNz
     */
    public class ImageLoader {
        static 
    HashMap<StringImageimages = new HashMap<>();
        static 
    String codeBase "http://chat.knuddels.de/";
        public static 
    void setCodeBase(String base)
        {
            
    codeBase base;
        }
        static private class 
    ImageLoaderThread extends Thread
        
    {
            
    URL url;
            
    String relative;
            public 
    ImageLoaderThread(URL uriString r)
            {
                
    url uri;
                
    relative r;
            }
            public 
    void run()
            {
                
    loadImage();
            }
            public 
    void loadImage()
            {
                try {
                
    Image img ImageIO.read(url);
                
    ImageLoader.setImage(imgrelative);
                
                }
                catch(
    Exception ex)
                {
                    
    ex.printStackTrace();
                }

            }
        }
        public static 
    void setImage(Image imgString relative)
        {
            
    images.remove(relative);
            
    images.put(relativeimg);
        }
        public static 
    Image getImage(String relativeUrl)
        {
            if(
    images.containsKey(relativeUrl))
            {
                return 
    images.get(relativeUrl);
            }
            
            
            try {
               
                
    URL url = new URL(codeBase+relativeUrl);
                
    System.out.println(url.toString());
                
    images.put(relativeUrlnull);
                
                
                new 
    ImageLoaderThread(urlrelativeUrl).start();
                return 
    null;

                

            }
            catch(
    Exception e)
            {
                
    e.printStackTrace();
                return 
    null;
            }
            
            
        }
        public static 
    void clearCache()
        {
            
    images.clear();
        }
        



    Wer es benötigt hier noch eine Klasse um Bilder zu preloaden:
    PHP-Code:
    public class PreloadImages {
        static 
    String preloadImagesString "/pics/icon_fullChannel.gif";
        
        public static 
    void preloadImages()
        {
            
    String[] preloadImages preloadImagesString.split(";");
            for(
    String imgrel preloadImages)
            {
                if(
    imgrel.isEmpty())
                    continue;
                while(
    ImageLoader.getImage(imgrel)==null)
                    try { 
    Thread.sleep(1); } catch (InterruptedException ex) {  }
            }
        }

    Geändert von DeKaDeNz (08.02.2012 um 12:43 Uhr)

  2. The Following 2 Users Say Thank You to DeKaDeNz For This Useful Post:

    Mardcore (11.02.2012), uncopyable (08.02.2012)

  3. #2
    Avatar von Gnome
    Registriert seit
    14.04.2012
    Beiträge
    75
    Thanked 34 Times in 24 Posts

    Standard AW: ImageLoader

    Mir ist aufgefallen, dass die Klasse das Bild in einem neuem Thread lädt, falls es noch nicht gecached wurde und dann null als Bild returned....
    Dadurch kann das Bild erst gezeichnet werden, wenn es 1. heruntergeladen ist, und 2. die Komponente die das Bild nutzt die repainted wird. Ich habe die entsprechende Methode um einen Parameter erweitert. Dort kann man dann eine Componente angeben, diese wird nach Bilddownload automatisch repainted.

    PHP-Code:




    import java
    .awt.Component;



    import java.awt.Image;
    import java.net.URL;
    import java.util.HashMap;
    import javax.imageio.ImageIO;

    /**
     *
     * @author DeKaDeNz
     */
    public class ImageLoader {
        static 
    HashMap<StringImageimages = new HashMap<>();
        static 
    String codeBase "http://chat.knuddels.de/";
        public static 
    void setCodeBase(String base)
        {
            
    codeBase base;
        }
        static private class 
    ImageLoaderThread extends Thread
        
    {
            
    URL url;
            
    String relative;
            
    Component send;
            public 
    ImageLoaderThread(URL uriString rComponent sender)
            {
                
    url uri;
                
    relative r;
                
    send sender;
            }
            public 
    void run()
            {
                
    loadImage();
            }
            public 
    void loadImage()
            {
                try {
                
    Image img ImageIO.read(url);
                
    ImageLoader.setImage(imgrelative);
                if(
    send!=null)
                    
    send.repaint();
                
                }
                catch(
    Exception ex)
                {
                    
    ex.printStackTrace();
                }

            }
        }
        public static 
    void setImage(Image imgString relative)
        {
            
    images.remove(relative);
            
    images.put(relativeimg);
        }    
        public static 
    Image getImage(String relativeUrl) {
            return 
    ImageLoader.getImage(relativeUrlnull);
        }
        public static 
    Image getImage(String relativeUrlComponent sender)
        {
            if(
    images.containsKey(relativeUrl))
            {
                return 
    images.get(relativeUrl);
            }
            
            
            try {
               
                
    URL url = new URL(codeBase+relativeUrl);
                
    System.out.println(url.toString());
                
    images.put(relativeUrlnull);
                
                
                new 
    ImageLoaderThread(urlrelativeUrlsender).start();
                return 
    null;

                

            }
            catch(
    Exception e)
            {
                
    e.printStackTrace();
                return 
    null;
            }
            
            
        }
        public static 
    void clearCache()
        {
            
    images.clear();
        }
        


Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.