我的目标是在 Java 中使用 DirectX 捕获屏幕。 我发现该项目非常详细并进行了解释 here在 C# 中。
不幸的是,我对升 C 没有任何了解。我不知道我是否可以在这里向那些处理这两种语言的人提出从 C# 到 Java 的重写代码,但我想最终的结果会引起很多人的兴趣。
无论如何,我提前感谢那些愿意帮助我解决这个问题的人。即使我从未尝试过,我也知道不建议使用 C# -> Java 转换软件(或任何其他语言),解释我的重写问题。
请在下面找到相关代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SlimDX.Direct3D9;
namespace KMPP
{
public class DxScreenCapture
{
Device d;
public DxScreenCapture()
{
PresentParameters present_params = new PresentParameters();
present_params.Windowed = true;
present_params.SwapEffect = SwapEffect.Discard;
d = new Device(new Direct3D(), 0, DeviceType.Hardware, IntPtr.Zero, CreateFlags.SoftwareVertexProcessing, present_params);
}
public Surface CaptureScreen()
{
Surface s = Surface.CreateOffscreenPlain(d, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, Format.A8R8G8B8, Pool.Scratch);
d.GetFrontBufferData(0, s);
return s;
}
}
}
PS:由于 Surface s 在这里是 DirectX 类型的图像,因此我很感兴趣然后将其转换为 PNG。
最佳答案
Java 不是 C#
C# 与 java 完全不同。 C# 可以使用 DirectX
但 java 不能使用它,因为 DirectX 在所有平台上都不可用。相反,您可以使用 java.awt
包中的 Robot
类。以下是获取 image
的方法。
用机器人做
Dimension ss = Toolkit.getDefaultToolkit().getScreenSize();
Robot r = new Robot();
BufferedImage s = r.createScreenCapture(new Rectangle(ss));
它返回一个包含屏幕截图的 BufferedImage
。
关于c# - 在 Java 中使用 DirectX 进行快速屏幕捕获(从 C# 中的现有代码重写到 Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12273300/