gpt4 book ai didi

java - 使用 Javanet 从 .NET System.DrawingImage 获取 Java 对象中的 Image 对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:55:05 29 4
gpt4 key购买 nike

我有一个关于使用 Javonet 的问题。在 .NET 代码中,我有一个方法返回一个System.DrawingImage 并且我必须在代码的 Java 端获取它。所以当我通过 Javonet API 发出属性的“获取”时,它返回一个N对象。这是示例:


.NET代码:


...
namespace ImageTest
{
public class FileReader
{
public byte[] GetByteArray(string filename)
{
return System.IO.File.ReadAllBytes(filename);
}

public System.Drawing.Image GetImage(string filename)
{
byte[] b = GetByteArray(filename);
using (var ms = new System.IO.MemoryStream(b, false))
{
return Image.FromStream(ms);
}
}
}
}

Java代码


...
public Image getImage(String fileName) {
NObject res = null;
try {
res = item.get(propName); // Casting NObject to Image is not allowed!
} catch (JavonetException jex) {
jex.printStackTrace();
}
return res; // Wrong: an Image object must be returned!
}

我必须将“res”转换为 Image 或 ImageIcon 或类似的东西 java 。有什么建议吗?我是否将其作为字节数组或其他方式获取还是 Javonet 上有另一种机制?

最佳答案

任何复杂对象(如类)将始终以“NObject”的形式返回,因此实际上它是 .NET 端该对象的句柄。如果您想将具体图像从 .NET 移动到 Java,您需要使用值类型以字节 [] 或字符串 base64 的形式进行,因为在 Java 中没有“System.Drawing.Image”类的直接对应物.

因此,您只需要从 System.Drawing.Image 类中提取图像的值类型形式。

你可以这样做:

NObject ms = Javonet.New("MemoryStream");
yourImageNObject.Save(ms,Javonet.getType("System.Drawing.Imaging.ImageFormat").getRef("Jpeg"));
Byte[] imageBytes = ms.invoke("ToArray");

//you can also unbox the bytes to regular byte[]
byte[] unboxed = new byte[fileBytes.length];

for(int i=0; i<imageBytes.length;i++)
unboxed[i]=imageBytes[i].byteValue();

关于java - 使用 Javanet 从 .NET System.DrawingImage 获取 Java 对象中的 Image 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35202607/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com