我的目标是使用在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是一种DirectX类型的图像,我会很感兴趣的,然后把它转换成PNG。
发布于 2012-09-05 01:45:20
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
。
https://stackoverflow.com/questions/12273300
复制相似问题