当前位置:  技术问答>java相关

[高分求救]怎么使用剪切板来进行图片的存入和取出?

    来源: 互联网  发布时间:2015-10-25

    本文导语:  好象,java.awt.datatransfer.Clipboard类只能存取类型为String的数据,如果是图象或者其他类型的数据,怎么样进行剪切板操作呢? 最好有一些例子代码,谢谢! | import java.awt.*; import java.awt.datatrans...

好象,java.awt.datatransfer.Clipboard类只能存取类型为String的数据,如果是图象或者其他类型的数据,怎么样进行剪切板操作呢?
最好有一些例子代码,谢谢!

|
import java.awt.*;
import java.awt.datatransfer.*;
import java.io.*;
public class ImageSelection implements Transferable,
ClipboardOwner {
static public DataFlavor ImageFlavor;
private DataFlavor[] flavors = {ImageFlavor};
private Image image;
static {
try {
ImageFlavor = new DataFlavor(
Class.forName(“java.awt.Image”), “AWT Image”);
}
catch(ClassNotFoundException e) {
e.printStackTrace();
}
catch(java.util.mime.MimeTypeParseException e) {
e.printStackTrace();
}
}
public ImageSelection(Image image) {
this.image = image;
}
public synchronized DataFlavor[] getTransferDataFlavors() {
return flavors;
}
public boolean isDataFlavorSupported(DataFlavor flavor) {
return flavor.equals(ImageFlavor);
}
public synchronized Object getTransferData(DataFlavor flavor)
throws UnsupportedFlavorException, IOException {
if(flavor.equals(ImageFlavor)) {
return image;
}
else {
throw new UnsupportedFlavorException(flavor);
}
}
public void lostOwnership(Clipboard c, Transferable t) {
}
}





import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
public class ClipboardTest2 extends Applet
implements ClipboardOwner {
private Clipboard clipboard;
private ImageCanvas copyFrom = new ImageCanvas();
private ImageCanvas copyTo = new ImageCanvas();
private Button copy = new Button(“Copy”);
private Button paste = new Button(“Paste”);
public void init() {
clipboard = new Clipboard(“image clipboard”);
copyFrom.setImage(getImage(getCodeBase(),”skelly.gif”));
add(copyFrom);
add(copyTo);
add(copy);
add(paste);
copy.addActionListener (new CopyListener());
paste.addActionListener(new PasteListener());
}
class CopyListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
ImageSelection contents =
new ImageSelection(copyFrom.getImage());
clipboard.setContents(contents, ClipboardTest2.this);
}
}
class PasteListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
Transferable contents = clipboard.getContents(this);
if(contents != null &&
contents.isDataFlavorSupported(
ImageSelection.ImageFlavor)) {
try {
Image image;
image = (Image) contents.getTransferData(
ImageSelection.ImageFlavor);
copyTo.setImage(image);
}
catch(Exception e) {
e.printStackTrace();
}
}
}
}
public void lostOwnership(Clipboard clip,
Transferable transferable) {
System.out.println(“Lost ownership”);
}
}
class ImageCanvas extends Panel {
private Image image;
public ImageCanvas() {
this(null);
}
public ImageCanvas(Image image) {
if(image != null)
setImage(image);
}
public void paint(Graphics g) {
g.setColor(Color.lightGray);
g.draw3DRect(0,0,getSize().width-1,
getSize().height-1,true);
if(image != null) {
g.drawImage(image, 1, 1, this);
}
}
public void update(Graphics g) {
paint(g);
}
public void setImage(Image image) {
this.image = image;
try {
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(image, 0);
tracker.waitForID(0);
}
catch(Exception e) { e.printStackTrace(); }
if(isShowing()) {
repaint();
}
}
public Image getImage() {
return image;
}
public Dimension getPreferredSize() {
return new Dimension(100,100);
}
}
import java.awt.*;
import java.awt.image.*;
import java.awt.datatransfer.*;
import java.io.*;
public class ImageSelection2 implements Transferable,
ClipboardOwner {
static public DataFlavor ImageFlavor;
static public DataFlavor ImageArrayFlavor;
private DataFlavor[] flavors = {ImageFlavor,
ImageArrayFlavor};
private Image image;
private int width, height;
static {
try {
ImageFlavor = new DataFlavor(
Class.forName(“java.awt.Image”),
“AWT Image”);
ImageArrayFlavor = new DataFlavor(“image/gif”,
“GIF Image”);
}
catch(ClassNotFoundException e) {
e.printStackTrace();
}
catch(java.util.mime.MimeTypeParseException e) {
e.printStackTrace();
}
}
public ImageSelection2(Image image, int width, int height) {
this.image = image;
this.width = width;
this.height = height;
}
public synchronized DataFlavor[] getTransferDataFlavors() {
return flavors;
}
public boolean isDataFlavorSupported(DataFlavor flavor) {
return flavor.equals(ImageFlavor) ||
flavor.equals(ImageArrayFlavor);
}
public synchronized Object getTransferData(
DataFlavor flavor)
throws UnsupportedFlavorException, IOException {
if(flavor.equals(ImageFlavor)) {
return image;
}
else if(flavor.equals(ImageArrayFlavor)) {
return imageToArray();
}
else
throw new UnsupportedFlavorException(flavor);
}
public void lostOwnership(Clipboard c, Transferable t) {
}
private int[] imageToArray() {
int[] pixels = new int[width*height];
PixelGrabber pg = new PixelGrabber(image,0,0,
width,height,pixels,0,width);
try { pg.grabPixels(); }
catch(InterruptedException e) { e.printStackTrace(); }
return pixels;
}
}


class PasteListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
Transferable contents = clipboard.getContents(this);
if(contents != null) {
try {
int[] array = (int[])
contents.getTransferData(
ImageSelection2.ImageArrayFlavor);
copyTo.setImage(waveThis(array,width,height));
}
catch(Exception e) {
e.printStackTrace();
}
}
}
}

给分吧!!!

|
你可以试试:你可以先直接读取图象文件置入byte数组中(通过bufferedImage类),然后转换成String格式传给Clipboard,当做到粘贴动作时,再转换一次,对屏幕进行写操作。具体我没试过,但是这两天我一直在做TGA的IMAGE显示,应该是可行的。

|
up

|
这么快就写出来啦??
呵呵,上班肯定不务正业啊……:)

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 求救啊 高分求救 UNIX下关于进程通讯的问题~
  • 求救!!!硬件高请进、、、、、、(十万火急,高分求救。)
  • Linux下无法启动apache 高分求救!在线等待
  • Solaris操作系统在启动的时候出错,急急救命呀 高分求救~~~
  • 高分求救!!!(200)我回多问相同问题来给分的,急急急
  • 高分求救!一个随机数产生的问题
  • 高分求救:有关内嵌汇编!!急!!!
  • 高分求救!jar文件直接双击运行的问题!
  • 大虾们谁有linux desktop 3.0(红旗)的序列号呀,高分求救!500
  • 高分求救:关于gnome/gtk+的问题
  • 高分在线求救!!!
  • 高分求救,关于jbuilder编程
  • 高分求救:简单问题
  • 为做需拟主机,单机架设DNS高分求救
  • 求救,帮忙,谢谢,高分相送!
  • linux 高分求救
  • 高分求救:我的solaris8如何进行网络配置?解决立即送分!
  • 高分求救:Linux下如何改变Ramdisk大小!急!!在线等待!!!
  • 高分求救!!基于http协议的代理图片显示不了
  • 高分求救,请教各位大侠!!!
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 谁参加过weblogic的证书考试,是否有经验可供参考?高分高分高高分
  • 哪里有JB6下载啊,高分相送,救命
  • 高分求救!我在uclinux上运行应用程序时出现内存分配错误,不知如何解决,解决者高分!!
  • 哪里去找中文的EJB文章?高分悬赏!
  • 有jsp的upload和download 代码么,高分相报!
  • (高分求助)请问,那里有软件开发的<设计文档>
  • 高分寻求jsp代码(网上调查系统,新闻发布系统)就这点分了
  • 高分求购做饼图、线形图的源吗?
  • 关于linu下的中文输入.(高分:300)
  • 一个简单的问题,高分求助!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3