Как сохранить BufferedImage в системном буфере обмена?Копировать BufferedImage в буфер обмена
ответ
Вот рабочий код взят из here успешно протестирована
package org.life.java.so.questions;
/**
* @author Jigar
*/
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.image.*;
import java.io.*;
public class CopyImagetoClipBoard implements ClipboardOwner {
public CopyImagetoClipBoard() {
try {
Robot robot = new Robot();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle screen = new Rectangle(screenSize);
BufferedImage i = robot.createScreenCapture(screen);
TransferableImage trans = new TransferableImage(i);
Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
c.setContents(trans, this);
}
catch (AWTException x) {
x.printStackTrace();
System.exit(1);
}
}
public static void main(String[] arg) {
CopyImagetoClipBoard ci = new CopyImagetoClipBoard();
}
public void lostOwnership(Clipboard clip, Transferable trans) {
System.out.println("Lost Clipboard Ownership");
}
private class TransferableImage implements Transferable {
Image i;
public TransferableImage(Image i) {
this.i = i;
}
public Object getTransferData(DataFlavor flavor)
throws UnsupportedFlavorException, IOException {
if (flavor.equals(DataFlavor.imageFlavor) && i != null) {
return i;
}
else {
throw new UnsupportedFlavorException(flavor);
}
}
public DataFlavor[] getTransferDataFlavors() {
DataFlavor[] flavors = new DataFlavor[ 1 ];
flavors[ 0 ] = DataFlavor.imageFlavor;
return flavors;
}
public boolean isDataFlavorSupported(DataFlavor flavor) {
DataFlavor[] flavors = getTransferDataFlavors();
for (int i = 0; i < flavors.length; i++) {
if (flavor.equals(flavors[ i ])) {
return true;
}
}
return false;
}
}
}
код Jigar в действительно хранить BufferedImage в буфер обмена, хотя быть конкретным, он ставит экран-захват всего экрана в буфер обмена.
Возможно, это может быть и не так. Если вы хотите скопировать свой собственный конкретный BufferedImage
, для этого я заменил конструктор из примера Jigar на метод copyImage()
.
public class CopyImagetoClipBoard implements ClipboardOwner
{
public void copyImage(BufferedImage bi)
{
TransferableImage trans = new TransferableImage(bi);
Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
c.setContents(trans, this);
}
Избегайте метода main()
в его классе.
Вы можете скопировать BufferedImage с кодом, например, как это:
BufferedImage bim;
// set bim to your desired BufferedImage content
// ...
CopyImagetoClipBoard ci = new CopyImagetoClipBoard();
ci.copyImage(bim);
Хороший материал, но нет необходимости создавать там целый новый класс. –
Ой, подождите. Неважно. Если кто-то еще подумал, как я, обратите внимание, что 'CopyImagetoClipBoard' является' ClipboardOwner'. –
- 1. Копировать в буфер обмена
- 2. jQuery Буфер обмена Копировать
- 3. Onclick копировать в буфер обмена
- 4. DataGridView: Копировать в буфер обмена
- 5. Копировать в буфер обмена и редактировать в буфер обмена
- 6. jQuery копировать многострочный список в буфер обмена
- 7. JS Копировать в буфер обмена несоприкасающийся раздел
- 8. Копировать вывод MySQL Workbench в буфер обмена
- 9. Копировать URL в буфер обмена Сенча сенсорный
- 10. iPhone iWebKit Копировать в буфер обмена
- 11. Копировать в буфер обмена option onShort Нажмите
- 12. Копировать в буфер обмена из Tableview
- 13. ZeroClipBoard - копировать текст в буфер обмена
- 14. Копировать созданные javascript изображения в буфер обмена
- 15. Копировать в буфер обмена не работает
- 16. Копировать Javascript в буфер обмена на сафари?
- 17. Как обнаружить событие «копировать в буфер обмена»
- 18. Копировать в буфер обмена с помощью Javascript
- 19. XE7 копировать текст в буфер обмена
- 20. VB.NET Копировать в буфер обмена Ошибка
- 21. Автоматически копировать веб-страницу в буфер обмена
- 22. Javascript: Копировать в буфер обмена OnKeyDown
- 23. DataGrid копировать в буфер обмена со стилем
- 24. Копировать в буфер обмена кнопку HTML Угловое
- 25. Копировать массив байтов в буфер обмена
- 26. Копировать/Вставить системный буфер обмена Vim
- 27. Prism.js копировать в буфер
- 28. Копировать путь/имя файла в Eclipse в буфер обмена
- 29. Копировать в буфер обмена не работает в сафари
- 30. Копировать байт-массив непосредственно в буфер обмена в Java
Вы можете уйти с переходом нуль вместо реализации ClipboardOwner. –