c# - 在 Java 中使用 DirectX 进行快速屏幕捕获(从 C# 中的现有代码重写到 Java)

标签 c# java directx rewrite screenshot

我的目标是在 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/

相关文章:

c# - 使用异步 Session_Start 方法时出现 session 问题?

java - 从 JTree 获取节点值并使用 JButton 将其显示在 JTable 中

directx - 在 Windows 10 上将 DirectInput 与 XBOX One Controller 和窗口焦点一起使用

c++ - DirectX 12 - 描述符堆

java - 来自 Java 的 Reporting Services WS - 获取 (401)Unauthorized

c++ - 找不到合适的阴影贴图深度偏差?

C# 编译器选择了错误的扩展方法

c# - SQL中的位逻辑

c# - 如何通过安装驱动程序来检查Windows是否繁忙?

java - 尝试使用 Secretkey 解密数据时返回错误