Frage

Ich versuche, 1 von zwei Dinge zu tun, Vorlieben Nummer 1:

Schalten Sie das Live View mit VB.NET und die Canon EDSDK 2.5.2 und machen die Live-Ausgabe in einer Windows Forms-Anwendung. Derzeit versuche ich es zu einem Bildfeld zu setzen; aber ich bin offen für Vorschläge sicher.

Die zweite Option, um zumindest wiederum auf dem Live View sein würde und hat es über den Videoausgang der Kamera an einen Monitor übertragen.

Ich mag wirklich die ersten obwohl erreichen! Im Folgenden meine aktuelle Code-Basis ist, helfen!

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

Keine korrekte Lösung

Andere Tipps

Ich war derjenige, der ursprünglich diese Frage gestellt. Ich sehe, dass es gibt andere hier, die immer noch die Antwort suchen. Ich habe die Lösung geschrieben, die wir schließlich mit mehr als auf meinem Blog unter

Hier ist eine VB-Datei, in der ich Klasse Kamera definieren, die Sie tun, Top-Level-Dinge wie

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

Ich denke, man kann es nützlich finden:

<snip>

Im Laufe der Jahre habe ich mehrere E-Mails für Updates zu diesem Codeblock empfangen, der auf GitHub als Open Source ist:

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

Die Camera-Klasse ist in slnCamliftController / src / Camera.vb

Ein Teil dieses Codes ist beschämend schrecklich. Zum Beispiel, um es zu bekommen für die 5D und 7D Kamera zu arbeiten, muss ich ein Programm erstellen, das das SDK und dann stürzt absichtlich initialisiert. Schrecklich! Ich weiß! Dies ist in Klugesaurus gefunden. Es ist wie wenn Sie versuchen, die 5D oder 7D zu verbinden, nichts funktioniert. Es gibt eine Grube dort von Spikes. So wir schieben einen Bauer (Der Klugesaurus) auf die Spitzen, ihn zu töten (es nicht still), so können wir über den Bauer Leiche Sicherheit gehen.

Es ist hässlich und schrecklich, aber: Es funktioniert jedes Mal. Wenn Sie es nicht tun, funktioniert es nicht. Ich habe Canon mehrmals gefragt, ob sie Quellcode für EOS Utility freigeben würde, die perfekt auf die 5D und 7D verbindet. Sie haben sich geweigert, fest jedes Mal. Mein Kollege Witz, dass sie nicht wollen, zu zeigen, dass auch sie eine Klugesaurus verwenden. Wie auch immer, ich wollte Ihnen nur bis zu diesem fiesen Detail ein Heads geben.

Ich habe auch einen Python-Modul als Schnittstelle mit der Kamera erstellt: http://github.com/superjoe30/pyedsdk

Es gibt Codebeispiele hier und Diskussionen über verschiedene Arten von acomplishing es.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top