Capture d'écran rapide à l'aide de DirectX en Java (réécriture du code existant en C # vers Java)


Mon objectif est de capturer l'écran en utilisant DirectX en Java. J'ai trouvé le projet détaillé et expliqué ici en C# .

Malheureusement, je n'ai aucune connaissance en C dièse. Je ne sais pas si je peux demander ici une réécriture du code mentionné ci-dessus de C# à Java à ceux qui gèrent les deux langages, mais je suppose que le résultat final intéresserait beaucoup de gens.

Quoi qu'il en soit, je remercie d'avance ceux qui seraient assez gentils pour m'aider avec cela. Même si je jamais essayé, je sais qu'un logiciel de conversion C# -> Java (ou tout autre langage) n'est pas conseillé, expliquant ma question de réécriture.

Veuillez trouver ci-dessous le code concerné:


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:Puisque Surface s est ici un type d'image DirectX, il serait intéressant pour moi de le convertir ensuite en PNG.

Author: Arsenic, 2012-09-05

1 answers

Java n'est pas C #

C# est totalement différent de java. C# peut utiliser DirectX mais java ne peut pas l'utiliser car DirectX n'était pas disponible sur toutes les plates-formes. Au lieu de cela, vous pouvez utiliser la classe Robot présente dans le package java.awt. Voici comment obtenir le image.

Le Faire avec un robot

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

Il renvoie un BufferedImage qui contient la capture d'écran.

 -2
Author: Sri Harsha Chilakapati, 2012-09-05 02:03:21