Fork me on GitHub

Java クリップボードにベクター画像をコピー

  • Jul 15, 2008

categoryプラグインは存在しません。

Javaから、オフィスアプリで使えるベクター画像をクリップボードに入れる方法です。例によってGroovyです。

環境

コード例

とりあえず、画像を入れておくTransferableクラスを用意します。今回はEMFですが、他のフォーマットでも大丈夫なはず。

class VectorSelection implements Transferable, ClipboardOwner \{
 InputStream data;
 DataFlavor flavor = new DataFlavor("image/x-emf")

 public VectorSelection(InputStream data) \{
   this.data = data
 \}
 public DataFlavor[] getTransferDataFlavors() \{
   return [flavor]
 \}
 public boolean isDataFlavorSupported(DataFlavor src) \{
   return flavor.equals(src)
 \}
 public Object getTransferData(DataFlavor src) \{
   if (flavor.equals(src)) \{
     return data;
   \}
 \}
 public void lostOwnership(Clipboard clipboard, Transferable contents) \{
   data = null;
 \}
\}

JavaVMがネイティブアプリにデータを渡すための、FlavorMapを設定しておきます。ビットマップなら、"DIB" などを指定すれば良いはず。

DataFlavor flavor = new DataFlavor("image/x-emf")
SystemFlavorMap flavorMap = SystemFlavorMap.getDefaultFlavorMap()
flavorMap.setNativesForFlavor(flavor, (String[])["ENHMETAFILE"])

その後、Transferableをセットしてやるとコピー完了です。inは、ここではEMFが入ったInputStreamを想定。

def clip = Toolkit.getDefaultToolkit().getSystemClipboard()
vs = new VectorSelection(in)
clip.setContents(vs, vs)

参考