Я получаю это сообщение об ошибке из следующего кода:
Exception in thread "main" java.lang.IllegalArgumentException: Width (-1) and height (-1) cannot be <= 0
at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:999)
at sun.awt.datatransfer.DataTransferer.imageToStandardBytes(DataTransferer.java:1994)
at sun.awt.windows.WDataTransferer.imageToPlatformBytes(WDataTransferer.java:267)
at sun.awt.datatransfer.DataTransferer.translateTransferable(DataTransferer.java:1123)
at sun.awt.windows.WDataTransferer.translateTransferable(WDataTransferer.java:163)
at sun.awt.windows.WClipboard.setContentsNative(WClipboard.java:73)
at sun.awt.datatransfer.SunClipboard.setContents(SunClipboard.java:93)
at automateSignature.LoadToClipboard.main(LoadToClipboard.java:8)
Какие изменения кода или изменения в файле изображения необходимы для исправления этой ошибки?Обратите внимание, что этот код предоставлен Оскаром Рейесом, но любые ошибки мои.
import java.awt.*;
import java.awt.datatransfer.*;
public class LoadToClipboard {
public static void main(String[] args) {
Toolkit tolkit = Toolkit.getDefaultToolkit();
Clipboard clip = tolkit.getSystemClipboard();
clip.setContents(new ImageSelection(
tolkit.getImage("MKSignature.jpg")), null);
}
}
class ImageSelection implements Transferable {
private Image image;
public ImageSelection(Image image) {
this.image = image;
}
// Returns supported flavors
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[]{DataFlavor.imageFlavor};
}
// Returns true if flavor is supported
public boolean isDataFlavorSupported(DataFlavor flavor) {
return DataFlavor.imageFlavor.equals(flavor);
}
// Returns image
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
if (!DataFlavor.imageFlavor.equals(flavor)) {
throw new UnsupportedFlavorException(flavor);
}
return image;
}
}
Я попытался найти место в коде, где можно указать ширину и высоту,но не удалось.Я также проверил свойства файла jpg, а также указаны w и h. enter code here
НОВАЯ ПОПЫТКА
Я СЕЙЧАС изменил код на следующий:Обратите внимание на использование createImage()
и prepareImage()
. Ошибки ширины и высоты теперь исправлены.
public static void main(String[] args) {
Toolkit tolkit = Toolkit.getDefaultToolkit();
Clipboard clip = tolkit.getSystemClipboard();
//File file = new File(
// "C:\\aaaa\\Admin\\SIGNATUREForInsertionIntoDocs\\MKSignature.jpg");
signatureImage = tolkit.createImage(
"C:\\aaaa\\Admin\\SIGNATUREForInsertionIntoDocs\\MKSignature.jpg");
tolkit.prepareImage(signatureImage, 108, 60, null);
// JOptionPane.showConfirmDialog(null, "Press to continue");
ImageSelection i = new ImageSelection(signatureImage);
clip.setContents(i, null);
}
Однако изображение, которое теперь помещается в буфер обмена, не совпадает с изображением в файле jpg.Он того же размера, но не по содержанию.
Изображение, отображаемое в GIMP (из файла .jpg), представляет собой пианино.
Изображение, вставленное из буфера обмена после запуска вышеуказанной программы для установки содержимого буфера обмена, имеет тот же размер, но пусто!
Каким-то образом изображение было удалено из его содержимого.Что я делаю не так?