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
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包含屏幕截图的文件。