Pergunta

Eu estou tentando fazer uma de duas coisas, a preferência número 1:

Ligue o Live View usando VB.NET ea Canon EDSDK 2.5.2 e processar a saída ao vivo em uma aplicação Windows Forms. Atualmente estou tentando colocá-lo para uma caixa de imagem; no entanto, estou aberto a sugestões, com certeza.

A segunda opção seria a pelo menos ligar o Live View e tê-lo fluir através da saída de vídeo da câmera para um monitor.

Eu realmente quero realizar o primeiro embora! Abaixo está a minha base de código atual, ajuda!

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

Nenhuma solução correta

Outras dicas

Eu era o único que originalmente publicado esta pergunta. Eu vejo que há outros aqui que ainda estão buscando a resposta. Tenho postado a solução que finalmente veio com sobre no meu blog em http://www.overridepro.com/2009/06/28/canon-sdk-live-view/ .

Aqui está um arquivo .vb no qual eu defino classe Camera que permite fazer coisas de alto nível como

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

Eu acho que você pode achar útil:

<snip>

Ao longo dos anos tenho recebido vários e-mails de actualizações deste bloco de código, que está no GitHub como código aberto:

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

A classe Camera é em slnCamliftController / src / Camera.vb

Alguns deste código é embaraçosamente terrível. Por exemplo, a fim de obtê-lo para trabalhar para a câmera 5D e 7D, eu tenho que criar um programa que inicializa o SDK e, em seguida, cai de propósito. Terrível! Eu sei! Isto é encontrado em Klugesaurus. É como quando você tenta conectar-se à 5D ou 7D, nada funciona. Há um poço de picos de lá. Por isso, enfiar um camponês (O Klugesaurus) sobre os picos, matando-o (ele falha silenciosamente), para que possamos atravessar o corpo morto do camponês para a segurança.

É feio e terrível, mas: Ele trabalha o tempo todo. Se você não fazê-lo, ele não funciona. Pedi Canon várias vezes se eles iriam liberar o código fonte para EOS Utility, que se conecta à 5D e 7D perfeitamente. Eles têm solidamente recusou cada vez. Minhas piadas do colega de trabalho que eles não querem revelar que eles, também, estão usando um Klugesaurus. De qualquer forma, eu só queria dar-lhe um heads-up para esse detalhe desagradável.

Além disso, criei um módulo Python para fazer a interface com a câmera: http://github.com/superjoe30/pyedsdk

Existem exemplos de código aqui e discussões sobre diferentes formas de acomplishing-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top