我正在开发一个能够编辑视频的Java应用程序。当我考虑出售它并在以后推送更新时,对我来说,在我尝试过的脚本API的帮助下使用扩展似乎是最容易的,但是那样我就不能在javascript中使用任何HTML代码。
由于这个原因,我试图在javascript中的数组中创建颜色值,该颜色值将返回给我的Java程序,该程序将该数组转换为BufferedImage。尝试该操作时,我收到一条错误消息,但我无法弄清楚自己做错了什么。
我的Java脚本代码:
bonusFunctionality = function (imageData, frame, totalNumberFrames, width, height) {
var offset = width*2/totalNumberFrames*frame;
return createImage(width, height, -width+offset, imageData);
};
createImage = function (width, height, offset, originalImageData) {
var data = [];
for (var i = 0; i < height*width; i++) {
//Red, Green, Blue, Alpha
if (i + offset < 0 || i + offset >= width) {
data[i*4] = 0;
data[i*4+1] = 0;
data[i*4+2] = 0;
data[i*4+3] = 100;
}
data[i*4] = originalImageData[(i+offset) * 4];
data[i*4+1] = originalImageData[(i+offset) * 4+1];
data[i*4+2] = originalImageData[(i+offset) * 4+2];
data[i*4+3] = originalImageData[(i+offset) * 4+3];
}
return data;
};
public BufferedImage[] useEffect(String inputImgPath, String inputImgExtension, int numberFrames, int width, int height) throws ScriptException, NoSuchMethodException, IOException {
BufferedImage[] images = new BufferedImage[numberFrames];
BufferedImage input = ImageIO.read(new File(inputImgPath));
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ImageIO.write(input, inputImgExtension, bos);
byte[] inputImgData = bos.toByteArray();
ObjectOutputStream oos = new ObjectOutputStream(bos);
for (int i = 0; i < numberFrames; i++) {
oos.writeObject(extensionFunction.invokeFunction("bonusFunctionality", inputImgData, i, numberFrames, width, height));
oos.flush();
byte[] data = bos.toByteArray();
ByteArrayInputStream bis = new ByteArrayInputStream(data);
images[i] = ImageIO.read(bis);
}
return images;
}
其中一些东西(例如extensionFunction(Type:Invocable))来自父类。如果您发现任何需要的类型,请随时询问。
我得到的错误如下:
线程“主”中的异常java.io.NotSerializableException:jdk.nashorn.api.scripting.ScriptObjectMirror 在java.base / java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1185) 在java.base / java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:349) 在extensionSupport.ImgRetExtension.useEffect(ImgRetExtension.java:26) 在core.Main.main(Main.java:19)