Pregunta

Estoy tratando de hacer 1 de dos cosas, la preferencia número 1:

A su vez en la vista en vivo usando VB.NET y la Canon EDSDK 2.5.2 y producir la salida en vivo en una aplicación Windows Forms. Actualmente estoy tratando de ponerlo a un cuadro de imagen; Sin embargo, estoy abierto a sugerencias seguro.

La segunda opción sería, al menos, a su vez, en la vista en vivo y reproducirla a través de la salida de video de la cámara a un monitor.

Realmente quiero lograr el primer embargo! A continuación es mi base de código actual, ayuda!

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

No hay solución correcta

Otros consejos

Yo era el que originalmente publicada esta pregunta. Veo que hay otros aquí que todavía están buscando la respuesta. He publicado la solución que finalmente se nos ocurrió Más en mi blog en http://www.overridepro.com/2009/06/28/canon-sdk-live-view/ .

Aquí hay un archivo .vb en el que defino la cámara de clase que le permiten hacer las cosas de nivel superior como

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

Creo que puede que le resulte útil:

<snip>

A través de los años he recibido varios correos electrónicos de cambios de este bloque de código, que está en GitHub como código abierto:

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

La clase La cámara está en slnCamliftController / src / Camera.vb

Algunos de este código es vergonzosamente terrible. Por ejemplo, con el fin de conseguir que funcione para la cámara 5D y 7D, tengo que crear un programa que inicializa el SDK y luego se estrella a propósito. ¡Terrible! ¡Lo sé! Esto se encuentra en Klugesaurus. Es como cuando intenta conectarse a la 5D o 7D, nada funciona. Hay un pozo de espigas allí. Así que empujamos un campesino (El Klugesaurus) sobre las espigas, matándolo (falla en silencio), por lo que podemos caminar a través cadáver del campesino a la seguridad.

Es feo y terrible, pero: Siempre funciona. Si no lo hace, no funciona. He pedido Canon múltiples veces si se liberarían código fuente para EOS Utility, que se conecta a la 5D y 7D perfectamente. Se han negado firmemente cada vez. Mi compañero de trabajo bromea que no quieren revelar que ellos, también, están utilizando un Klugesaurus. De todas formas, sólo quería darle una mano a mano a esa desagradable detalle.

También he creado un módulo de Python para interactuar con la cámara: http://github.com/superjoe30/pyedsdk

Hay ejemplos de código aquí y discusiones sobre diferentes formas de acomplishing ella.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top