2009-05-21 2 views
4

Я пытаюсь сделать 1 из двух вещей, предпочтение номер 1:Live View с Canon EDSDK 2.5.2 VB.NET

Включите Live View с помощью 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 
+1

Можете ли вы более подробно описать, что это такое, что не работает, как оно не работает (подробные сообщения об ошибках, по какой строке это не удается)? –

+0

Это не будет работать на этой линии: ERR = EdsCreateImageRef (поток, outMemoryRef) с ERR_FILE_FORMAT_NOT_RECOGNIZED Любая помощь очень ценится ... – 2009-05-21 22:10:39

ответ

0

Есть примеры кода here и дискуссии по различным способам его из палочки.

+0

Ни один из примеров кода не похоже на работу. Если кто-то еще имеет вход ... – 2009-06-07 23:24:47

2

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

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

Класс камеры находится в slnCamliftController/src/Camera.vb

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

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

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

+0

С тех пор я сделал большие изменения для этого класса. Если вы хотите обновленный и полезный API-интерфейс камеры, свяжитесь со мной. Я должен убедиться, что у меня есть права на его распространение и прочее. В противном случае просто используйте обрезку в качестве примера рабочего кода. – andrewrk

+0

У меня тоже есть проблемы с просмотром живого изображения. Не могли бы вы разместить его где-то @ superjoe30? – swdev

+0

Я обновил ответ по ссылке. – andrewrk

2

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

Смежные вопросы