5

我的目标是在 Java 中使用 DirectX 捕获屏幕。我发现该项目非常详细,并在 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 对我来说会很有趣。

4

1 回答 1

-2

Java 不是 C#

C# 与 java 完全不同。C# 可以使用DirectX但 java 不能使用它,因为 DirectX 在所有平台上都不可用。相反,您可以使用包中Robot存在的类java.awt。以下是如何获取image.

用机器人做

Dimension ss = Toolkit.getDefaultToolkit().getScreenSize();
Robot r = new Robot();
BufferedImage s = r.createScreenCapture(new Rectangle(ss));

它返回一个BufferedImage包含屏幕截图的内容。

于 2012-09-05T01:45:20.017 回答