Question

Je suis en train de faire 1 de deux choses, le nombre de préférence 1:

Activer le mode Live View en utilisant VB.NET et le Canon EDSDK et rendre la 2.5.2 sortie en direct dans une application Windows Forms. Actuellement, je suis en train de le mettre dans une boîte d'image; cependant, je suis ouvert aux suggestions pour vous.

La deuxième option serait d'au moins tour sur le Live View et avoir flux via la sortie vidéo sur l'appareil photo à un moniteur.

Je veux vraiment accomplir la première si! Ci-dessous mon code de base, aide!

Private Sub btnStartLiveView_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStartLiveView.Click

    Dim err As Integer = EDS_ERR_OK


    Dim prop As Integer = EdsEvfOutputDevice.kEdsEvfOutputDevice_PC
    Dim proptype As Integer = EDSDKTypes.kEdsPropID_Evf_OutputDevice
    '// Stock the property.'
    Dim wkIntPtr As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(prop))
    Marshal.StructureToPtr(prop, wkIntPtr, False)
    'send property/command to the camera'
    EdsSetPropertyData(model.getCameraObject(), proptype, 0, Marshal.SizeOf(prop), prop)

    Dim stream As IntPtr
    Dim outMemoryRef As IntPtr
    Dim evfImage As IntPtr

    err = EdsCreateMemoryStream(0, stream)

    If err = EDS_ERR_OK Then

        err = EdsCreateImageRef(stream, outMemoryRef) '(stream, evfImage)'

    Else

        Dim str As String = Hex(err)

        MessageBox.Show(str)

    End If

    If err = EDS_ERR_OK Then
        err = EdsDownloadEvfImage(model.getCameraObject(), evfImage)
    Else

        Dim str As String = Hex(err)

        MessageBox.Show("&H" & str & "L") ' Shows &H2CL which = ERR_FILE_FORMAT_NOT_RECOGNIZED'
    End If

    ' Get the Incidental Data of the Image'

    If err = EDS_ERR_OK Then

        Dim zoom As UInt32
        Dim point As IntPtr


        EdsGetPropertyData(outMemoryRef, kEdsPropID_Evf_ZoomPosition, 0, Marshal.SizeOf(zoom), zoom)

        EdsGetPropertyData(outMemoryRef, kEdsPropID_Evf_ZoomPosition, 0, Marshal.SizeOf(point), point)

    Else

        'MessageBox.Show(err.ToString())'

    End If


    Dim buffer(Marshal.SizeOf(stream)) As Byte

    Dim mStream As System.IO.Stream = New System.IO.MemoryStream(Marshal.SizeOf(stream))


    Dim gcTime As GCHandle = GCHandle.Alloc(0, GCHandleType.Pinned)
    Dim pTime As IntPtr = gcTime.AddrOfPinnedObject()
    Marshal.Copy(stream, buffer, 0, Marshal.SizeOf(stream))

    mStream.Write(buffer, 0, Marshal.SizeOf(stream))

    Me.PictureBox1.Image = Image.FromStream(mStream)

    EdsRelease(stream)
End Sub

Pas de solution correcte

Autres conseils

Je suis celui qui a été posté cette question. Je vois qu'il y en a d'autres ici qui cherchent encore la réponse. J'ai posté la solution que nous avons finalement arrivés avec plus sur mon blog à

Voici un fichier .vb dans lequel je définis Caméra classe qui vous permet de faire les choses de haut niveau comme

Dim camera as New Camera
camera.EstablishSession()
camera.TakePicture("C:\path\to\save.jpg")
camera.StartLiveView(me.LiveViewPictureBox)
camera.StopLiveView()
camera.FlushTransferQueue()

Je pense que vous trouverez peut-être utile:

<snip>

Au fil des années, j'ai reçu plusieurs e-mails pour les mises à jour à ce bloc de code, qui est sur GitHub en open source:

http://github.com/superjoe30/Camlift-Controller

La classe Camera est slnCamliftController / src / Camera.vb

Certains de ce code est honteusement horrible. Par exemple, pour faire fonctionner la caméra 5D et 7D, je dois créer un programme qui initialise le SDK puis se bloque sur le but. Terrible! Je connais! Il se trouve dans Klugesaurus. Il est comme lorsque vous essayez de vous connecter au 5D ou 7D, rien ne fonctionne. Il y a une fosse de pointes là-bas. Nous avons donc poussons un paysan (Le Klugesaurus) sur les pointes, le tuant (il échoue en silence), afin que nous puissions marcher à travers le corps à la sécurité mort du paysan.

Il est laid et terrible, mais: Il fonctionne à chaque fois. Si vous ne le faites pas, cela ne fonctionne pas. J'ai demandé plusieurs fois Canon si elles libéreraient le code source pour EOS Utility, qui se connecte au 5D et 7D parfaitement. Ils ont solidement refusé chaque fois. Mon collègue de travail plaisante qu'ils ne veulent pas révéler qu'eux aussi, utilisent un Klugesaurus. Quoi qu'il en soit, je voulais juste vous donner une tête à ce détail méchant.

J'ai aussi créé un module Python pour l'interface avec l'appareil photo: http://github.com/superjoe30/pyedsdk

Il y a des exemples de code et des discussions sur les différentes façons de acomplishing il.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top