Screenshot DirectX

Résolu
Sentynel Messages postés 85 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 13 juillet 2013 - 28 juin 2012 à 20:10
 Utilisateur anonyme - 28 juin 2012 à 23:54
Bonjour à tous,
Je travail actuellement sur un projet permettant de prendre des screenshots et de les publier automatiquement sur des réseaux sociaux.
Problème : Les screenshots ne fonctionnent pas en jeux.
J'ai donc pensé à une utilisation de directX mais je ne sais pas tellement comment procéder.

En cherchant un peu sur internet, j'ai trouver ceci :

Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D

Public Class Mainform
    Public GraphicsDevice As Device = Nothing
    Public presentParams As PresentParameters = New PresentParameters

    Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Capture
    End sub

    Sub InitializeGraphics()
        Dim current As Format = Manager.Adapters(0).CurrentDisplayMode.Format
        presentParams.SwapEffect = SwapEffect.Discard
        presentParams.BackBufferFormat = current
        presentParams.Windowed = True
        presentParams.BackBufferHeight = 0
        presentParams.BackBufferWidth = 0

        GraphicsDevice = New Direct3D.Device(0, Direct3D.DeviceType.Hardware, Me, CreateFlags.SoftwareVertexProcessing, presentParams)
    End Sub

    Function CaptureScreenshot(ByVal Device As Direct3D.Device, ByVal Filename As String, ByVal ImageFormat As Direct3D.ImageFileFormat) As Boolean
        Dim Ssurface As Direct3D.Surface
        Dim current As Format = Direct3D.Manager.Adapters(0).CurrentDisplayMode.Format

        Ssurface = Device.GetBackBuffer(0, 0, BackBufferType.Mono)
        SurfaceLoader.Save(Filename, ImageFormat, Ssurface)
        Ssurface.Dispose()

        Return True
    End Function



Sub Capture
     CaptureScreenshot(GraphicsDevice, "C:\image.jpg", ImageFileFormat.Jpeg)
end sub
End class


Apres application du code, j'ai importé les DLL de DirectX se trouvant dans C:\Windows\Microsoft .net\DirectX for Managed Code\
Visual Studio me retourne donc plusieurs erreurs.

Est-ce que quelqu'un pourrai me donner un coup de main ?
Merci :-)

7 réponses

Utilisateur anonyme
28 juin 2012 à 20:37
Pardon, erreur de lien
Plutôt celui-ci.
3
Sentynel Messages postés 85 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 13 juillet 2013
28 juin 2012 à 22:02
Apparement il faudrai que j'ajoute :

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

  <startup useLegacyV2RuntimeActivationPolicy="true">

    <supportedRuntime version="v4.0"/>

  </startup>

</configuration>


à mon fichier de configuration, mais de quel fichier s'agit-il svp ?
3
Utilisateur anonyme
28 juin 2012 à 23:54
Bonjour,

Si ta solution est autre chose que de générer en 32 bits, il y en a qui seraient peut-être intéressés de la connaître.
1
Utilisateur anonyme
28 juin 2012 à 20:34
Bonsoir,
Apres application du code, j'ai importé les DLL de DirectX se trouvant dans C:\Windows\Microsoft .net\DirectX for Managed Code\
Visual Studio me retourne donc plusieurs erreurs.

Il faut installer le SDK de directx
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Sentynel Messages postés 85 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 13 juillet 2013
28 juin 2012 à 20:41
Bonsoir banana32,
Oui j'ai déjà essayer d'installer ce SDK deux fois mais pendant l'installation il me retourne une erreur.
Je vais réessayer encore une fois.
Merci
0
Sentynel Messages postés 85 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 13 juillet 2013
28 juin 2012 à 21:31
Je n'ai plus d'erreurs mais quand je lance un debug, j'obtiens l'erreur suivante :



L'exception System.InvalidOperationException n'a pas été gérée
  Message=Une erreur s'est produite lors de la création du formulaire. Pour plus d'informations, consultez Exception.InnerException. L'erreur est : L'assembly en mode mixte est créé avec la version 'v1.1.4322' du runtime et ne peut pas être chargé dans le runtime 4.0 sans d'autres informations de configuration.
  Source=Project
  StackTrace:
       à Project.My.MyProject.MyForms.Create__Instance__[T](T Instance) dans 17d14f5c-a337-4978-8281-53493378c1071.vb:ligne 190
       à Project.My.MyProject.MyForms.get_MainForm()
       à Project.My.MyApplication.OnCreateMainForm() dans C:\Users\Maxime\Dropbox\TeamDev\Project\My Project\Application.Designer.vb:ligne 35
       à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
       à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
       à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
       à Project.My.MyApplication.Main(String[] Args) dans 17d14f5c-a337-4978-8281-53493378c1071.vb:ligne 81
       à System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       à System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       à System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       à System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.IO.FileLoadException
       Message=L'assembly en mode mixte est créé avec la version 'v1.1.4322' du runtime et ne peut pas être chargé dans le runtime 4.0 sans d'autres informations de configuration.
       Source=Project
       StackTrace:
            à Project.MainForm..ctor()
       InnerException: 
0
Sentynel Messages postés 85 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 13 juillet 2013
28 juin 2012 à 22:27
Probleme régler... Merci quand même...
0
Rejoignez-nous