Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Telecamera progressiva
Forum - C# / VB.NET - Telecamera progressiva

Avatar
taly (Normal User)
Newbie


Messaggi: 7
Iscritto: 01/10/2018

Segnala al moderatore
Postato alle 17:33
Lunedì, 01/10/2018
Buongiorno a tutti, sono nuovo in questo sito. avrei delle domande da sottoporvi ho una telecamera 1391x1039 colori, gestita da una DLL esterna, ho accesso al buffer della telecamera attraverso un chiamata (ptr) i dati sono 16 bit short, attualmente uso la funzione Marshal.copy , ma quando leggo con copy il buffer la funzione mi restituisce errore di memoria se vado oltre un certo numero di byte. Volevo sapere se qualcuno può consigliarmi un metodo migliore per poter leggere i dati progressivi della telecamera e visualizzarli in un PictureBox. Sto usando VB.net.
Grazie

PM Quote
Avatar
sps84 (Normal User)
Expert


Messaggi: 202
Iscritto: 11/02/2009

Segnala al moderatore
Postato alle 10:48
Martedì, 02/10/2018
Che telecamera è? Marca etc..

PM Quote
Avatar
taly (Normal User)
Newbie


Messaggi: 7
Iscritto: 01/10/2018

Segnala al moderatore
Postato alle 15:31
Martedì, 02/10/2018
Grazie della risposta.
Una telecamera Artemis ATIK 314E per astronomia. ho letto qualche consiglio nel Forum utilizzando le normali procedure per gestire il Buffer e la codifica del colore con risultati pessimi.

PM Quote
Avatar
sps84 (Normal User)
Expert


Messaggi: 202
Iscritto: 11/02/2009

Segnala al moderatore
Postato alle 23:11
Martedì, 02/10/2018
Oltre alla dll ti hanno fornito qualche esempio?

PM Quote
Avatar
taly (Normal User)
Newbie


Messaggi: 7
Iscritto: 01/10/2018

Segnala al moderatore
Postato alle 17:18
Mercoledì, 03/10/2018
Grazie della risposta.
Nella CD della telecamera ci sono degli esempi, ma sono molto poco chiari. Ti invio un sito che ho trovato dove ci sono vari programmi che io non capisco scritti in C++ (https://github.com/iceblu3710/open-phd-guiding/blob/master/ ... anche se la telecamera non è la stessa, ma le DLL sono uguali. Comunque grazie del tuo tempo. Saluti Franco

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 23:12
Mercoledì, 03/10/2018
Come prima cosa noto che se hai un errore nel copiare una certa dimensione di byte allora il buffer di tuo interesse è piu piccolo. Possiamo vedere il codice incriminato?

PM Quote
Avatar
taly (Normal User)
Newbie


Messaggi: 7
Iscritto: 01/10/2018

Segnala al moderatore
Postato alle 17:30
Giovedì, 04/10/2018
Grazie della risposta.
Ti invio il codice:
Public Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
        Timer2.Interval = 1
        Timer2.Enabled = True
        Timer2.Start()
        If ArtemisImageReady(Cam_Handle) = True Then
            Dim ptr1 As IntPtr = ArtemisImageBuffer(Cam_Handle)
            Call Tele1(ptr1)
        End If
    End Sub
Public Function Tele1(ByVal PtrVideo As IntPtr)
        Dim bmp As Bitmap = New Bitmap(1391, 1039)
        bmp = New Bitmap(1391, 1039, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
        Dim rect As Rectangle = New Rectangle(0, 0, bmp.Width, bmp.Height)
        Dim pxf As PixelFormat = PixelFormat.Format32bppArgb 'Buono
        Dim bmpData As BitmapData = bmp.LockBits(rect, ImageLockMode.ReadOnly, pxf)
        Dim numBytes As Integer = Math.Abs(bmpData.Width) * bmp.Height
        Dim rgbValues(numBytes * 4) As Byte
        Dim Buffer(numBytes) As Integer
        Dim ptr As IntPtr = bmpData.Scan0
        Dim i As Integer
        Marshal.Copy(PtrVideo, Buffer, 0, numBytes)
        For i = 0 To numBytes
            Dim bytes As Byte() = BitConverter.GetBytes(Buffer(i))
            Dim Alpha As Byte = bytes(3)
            Dim Red As Byte = bytes(2)
            Dim Green As Byte = bytes(1)
            Dim Blue As Byte = bytes(0)

            rgbValues(i * 4 + 0) = Blue
            rgbValues(i * 4 + 1) = Green
            rgbValues(i * 4 + 2) = Red
            rgbValues(i * 4 + 3) = Alpha
        Next

        Marshal.Copy(rgbValues, 0, ptr, numBytes * 4)
        bmp.UnlockBits(bmpData)
        PictureBox1.Image = bmp
        ArtemisStartOverlappedExposure(Cam_Handle)
        
    End Function
Non so se la procedura d'invio è quella giusta.
Grazie

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 17:58
Sabato, 06/10/2018
Ad occhio non vedo grandi errori, io ti consiglio di cercare di capire la documentazione allegata.

Quali dei due copy da errore? Sei sicuro che il formato dell'immagine sia veramente quello?

PM Quote