Live View с Canon EDSDK 2.5.2 VB.NET

Я пытаюсь сделать 1 из двух вещей, предпочтение номер 1:

Включите просмотр в реальном времени с помощью VB.NET и Canon EDSDK 2.5.2 и визуализируйте вывод в режиме реального времени в приложении Windows Forms. В настоящее время я пытаюсь поместить его в коробку с картинками; тем не менее, я открыт для предложений наверняка.

Второй вариант — хотя бы включить Live View и транслировать его через видеовыход камеры на монитор.

Я действительно хочу выполнить первое все же! Ниже моя текущая кодовая база, помогите!

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

person Community    schedule 21.05.2009    source источник
comment
Можете ли вы описать более подробно, что не работает, как это не работает (подробные сообщения об ошибках, на какой строке происходит сбой и т. д.)?   -  person Fredrik Mörk    schedule 22.05.2009
comment
В этой строке происходит сбой: err = EdsCreateImageRef(stream, outMemoryRef) with ERR_FILE_FORMAT_NOT_RECOGNIZED Любая помощь приветствуется...   -  person    schedule 22.05.2009


Ответы (3)


Я был тем, кто изначально задал этот вопрос. Я вижу, что здесь есть и другие, кто все еще ищет ответ. Я опубликовал решение, которое мы наконец нашли, в своем блоге по адресу http://www.overridepro.com/2009/06/28/canon-sdk-live-view/ .

person Justin    schedule 15.10.2010

Вот файл .vb, в котором я определяю класс Camera, который позволяет вам делать такие вещи верхнего уровня, как

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

Я думаю, что вы можете найти это полезным:

<snip>

За прошедшие годы я получил несколько электронных писем с обновлениями этого блока кода, который находится на GitHub с открытым исходным кодом:

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

Класс Camera находится в slnCamliftController/src/Camera.vb

Часть этого кода до безобразия ужасна. Например, чтобы заставить его работать с камерой 5D и 7D, мне нужно создать программу, которая инициализирует SDK, а затем намеренно аварийно завершает работу. Ужасный! Я знаю! Это найдено в Klugesaurus. Это как когда пытаешься подключиться к 5D или 7D, ничего не получается. Там есть яма с шипами. Итак, мы пихаем крестьянина (Клугезавра) на шипы, убивая его (это бесшумно проваливается), чтобы мы могли пройти через мертвое тело крестьянина в безопасное место.

Это некрасиво и ужасно, но: Это работает каждый раз. Если вы этого не сделаете, это не сработает. Я несколько раз спрашивал у Canon, выпустят ли они исходный код для EOS Utility, которая идеально соединяется с 5D и 7D. Каждый раз они решительно отказывались. Мой коллега шутит, что они не хотят раскрывать, что тоже используют клугезавра. В любом случае, я просто хотел предупредить вас об этой неприятной детали.

Я также создал модуль Python для взаимодействия с камерой: http://github.com/superjoe30/pyedsdk

person andrewrk    schedule 05.08.2009
comment
С тех пор я внес большие изменения в этот класс. Если вам нужен обновленный и полезный API камеры, свяжитесь со мной. Я должен убедиться, что у меня есть права на его распространение и прочее. В противном случае просто используйте вырезку в качестве примера рабочего кода. - person andrewrk; 02.09.2009
comment
У меня тоже проблемы с просмотром в реальном времени. Не могли бы вы опубликовать это где-нибудь @superjoe30? - person swdev; 07.01.2012

Примеры кода приведены здесь и обсуждаются различные способы его выполнения.

person jvanderh    schedule 25.05.2009