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

Ars*_*nic 5 c# java directx rewrite screenshot

我的目标是使用Java中的DirectX捕获屏幕.我发现这个项目充分详细的解释,并在这里用C#.

不幸的是,我对C sharp没有任何了解.我不知道我是否可以在这里问一下从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;
    }
}
}
Run Code Online (Sandbox Code Playgroud)

PS:由于Surface s在这里是一个DirectX类型的图像,然后将它转换为PNG对我来说会很有趣.

Sri*_*ati -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));
Run Code Online (Sandbox Code Playgroud)

它返回一个BufferedImage包含屏幕截图的文件。

  • Java 方式,**在本例中不是**。如此处所述 [链接](http://stackoverflow.com/questions/12262448/full-screen-capture-of-a-directx-program-in-java-javacv),**Robot 类无法捕获全屏 DirectX* *,这就是我正在寻找的。为了这个目的,我只找到了这种 C# 方法。 (4认同)