网上流传的图片管理类ImageShop

        原理将RCP应用使用图片放在一个特定的目录,在加载时加载在同时使用ImageRegistry对图片的进行管理。

 

代码如下:

 

package com.unutrip.plugin.dev.commons;

import java.io.File;
import java.net.URL;
import java.util.HashSet;
import java.util.Set;

import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.swt.graphics.Image;
import org.osgi.framework.Bundle;

import com.unutrip.plugin.dev.Activator;
/**
 * 网上流传的图片管理类
 * 每个UI程序都离不开图片,一般的Eclipse插件,在一个类中定义了若干静态常量,每一个常量指定一个icon的名字,
 * 在程序中用到图片的时候,通过这个常量计算得到图片。Eclipse的插件一般规模较大,图片很多,而且分不同的像素,
 * 彩色,灰白等。这样有利于统一的管理和开发人员的沟通。但并不是每个plugin或者rcp都要用到这么多图片,如果只
 * 有很少的图片的话,可以用图片的名字作为key,来存取图片。 所有的图片都放在根目录/icons目录下,在系统中如果
 * 用到名字为default.gif的图片,只要调用ImageShop.get (“default”)即可;有时在Action中需要用到
 * ImageDescriptor,调用ImageShop. getDescriptor(“default”)就可以取到。
 * 
 * @author longgangbai
 *
 */
public class ImageShop {
		         private static ImageRegistry register = new ImageRegistry();  
		    
		          private static Set keys = new HashSet();  
		          static {  
		                 initial();  
		           }  
		          public static ImageDescriptor getDescriptor(String key) {  
		                  ImageDescriptor image = register.getDescriptor(key);  
		                 if (image == null) {  
		                        image = ImageDescriptor.getMissingImageDescriptor();  
		                 }  
		                return image;  
		          }  
		         public static Image get(String key) {  
		                 Image image = register.get(key);  
		                 if (image == null) {  
		                        image = ImageDescriptor.getMissingImageDescriptor().createImage();  
		                 }  
		                 return image;  
		         }  
		          public static String[] getImageKey() {  
		                 return (String[]) keys.toArray(new String[keys.size()]);  
		         }  
		          private static void initial() {  
		                 Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID);  
		                 URL url = bundle.getEntry("icons");  
		                 try {  
		                        url = Platform.asLocalURL(url);  
		                 } catch (Exception e) {  
		                	 e.printStackTrace();
		                 }  
		                 File file = new File(url.getPath());  
		                 File[] images = file.listFiles();  
		                 for (int i = 0; i < images.length; i++) {  
		                        File f = images[i];  
		                        if (!f.isFile()) {  
		                               continue;  
		                        }  
		                        String name = f.getName();  
		                        if (!name.endsWith(".gif")) {  
		                               continue;  
		                        }  
		                        String key = name.substring(0, name.indexOf('.'));  
		                        URL fullPathString = bundle.getEntry("icons/" + name);  
		                        ImageDescriptor des = ImageDescriptor.createFromURL(fullPathString);  
		                        register.put(key, des);  
		                        keys.add(key);  
		                 }  
		          }  
		   }  
		     

 

你可能感兴趣的:(eclipse,UI,.net,F#,osgi)