weidagang2046的专栏

物格而后知致
随笔 - 8, 文章 - 409, 评论 - 101, 引用 - 0
数据加载中……

Transfer type to transfer SWT ImageData objects

/**
  * Transfer type to transfer SWT ImageData objects.
  */

import  java.io.ByteArrayInputStream;
import  java.io.ByteArrayOutputStream;
import  java.io.DataInputStream;
import  java.io.DataOutputStream;
import  java.io.IOException;

import  org.eclipse.swt.SWT;
import  org.eclipse.swt.dnd.ByteArrayTransfer;
import  org.eclipse.swt.dnd.DND;
import  org.eclipse.swt.dnd.TransferData;
import  org.eclipse.swt.graphics.ImageData;
import  org.eclipse.swt.graphics.ImageLoader;

public class  ImageTransfer  extends  ByteArrayTransfer  {

   private static final  String TYPENAME =  "imagedata" ;

   private static final  int  TYPEID = registerType ( TYPENAME ) ;

   private static  ImageTransfer _instance =  new  ImageTransfer () ;

   public static  ImageTransfer getInstance () {
     return  _instance;
   }

   public  void  javaToNative ( Object object, TransferData transferData ) {
     if  ( !checkImage ( object || !isSupportedType ( transferData )) {
       DND.error ( DND.ERROR_INVALID_DATA ) ;
     }
     ImageData imdata =  ( ImageData object;
     try  {
       // write data to a byte array and then ask super to convert to
       // pMedium
       ByteArrayOutputStream out =  new  ByteArrayOutputStream () ;
       DataOutputStream writeOut =  new  DataOutputStream ( out ) ;
       ImageLoader loader =  new  ImageLoader () ;
       loader.data =  new  ImageData [] {  imdata  } ;
       loader.save ( writeOut, SWT.IMAGE_BMP ) ;
       writeOut.close () ;
       byte []  buffer = out.toByteArray () ;
       super .javaToNative ( buffer, transferData ) ;
       out.close () ;
     catch  ( IOException e ) {
     }
   }

   public  Object nativeToJava ( TransferData transferData ) {
     if  ( !isSupportedType ( transferData ))
       return null ;

     byte []  buffer =  ( byte [])  super .nativeToJava ( transferData ) ;
     if  ( buffer ==  null )
       return null ;

     ImageData imdata;
     try  {
       ByteArrayInputStream in =  new  ByteArrayInputStream ( buffer ) ;
       DataInputStream readIn =  new  DataInputStream ( in ) ;
       imdata =  new  ImageData ( readIn ) ;
       readIn.close () ;
     catch  ( IOException ex ) {
       return null ;
     }
     return  imdata;
   }

   protected  String []  getTypeNames () {
     return new  String [] {  TYPENAME  } ;
   }

   protected  int []  getTypeIds () {
     return new  int [] {  TYPEID  } ;
   }

   boolean  checkImage ( Object object ) {
     return  ( object !=  null  && object  instanceof  ImageData ) ;
   }

   protected  boolean  validate ( Object object ) {
     return  checkImage ( object ) ;
   }
}

from: http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/TransfertypetotransferSWTImageDataobjects.htm

posted on 2006-09-05 00:57 weidagang2046 阅读(592) 评论(0)  编辑  收藏 所属分类: Java


只有注册用户登录后才能发表评论。


网站导航: