» »

[C#] in frame iz kamere

[C#] in frame iz kamere

ql000 ::

Ko frame prileti v računalnik (firewire kamera) mi nek razred vrne kazalec tipa IntPtr na ta frame. Slike, ki jih zajemam iz kamere so 640x480, Y_MONO pixel format (8 bitna sivinska barvna globina). Jasno mi je, da je kazalec IntPtr velik 4 byte, samo ni mi pa jasno kazalec na kaj je ta IntPtr? Kazalec na info, da je slika prišla v comp ali dejansko kazalec na celotno sliko oz. začetek te slike? Zakaj sprašujem? Frame, ki priletijo v comp hočem zložiti v neko bytno polje, ker je to najhitrejše, in na koncu neke npr. meritve, slike iz tega polja shranit vsako posebej na disk. Jaz uporabljam neko callback funkcijo, ki se aktivira vsakič, ko frame prileti v računalnik. Uporabljam Fire-i jevo firewire kamero.

mHook ::

Ponavadi imaš v tistem razredu, iz katerega ti letijo eventi, tudi neke metode za nadaljo obdelavo, ki jim posreduješ dobljeni IntPtr... (lahko da je tudi kakšen windows api)
Kaj več ne vem.

Imaš kakšno dokumentacijo o tem razredu?

vecpani ::

IntPtr je kazalec na trenutno sliko. Jest mam to pri skeniranju in ta kazalec mi vrne sliko, ki jo
trenutno obdelujem.
Tule je moje shranjevanje,sam je napisan v VB.

tole je pač v funkciji kjer skeniram

Dim picsdisplay As ArrayList = New ArrayList()
Dim img As IntPtr = CType(picsdisplay(i), IntPtr)

SaveImage(img, Filename)

'defenicija fukcije shrani
Public Function SaveImage(ByVal dibhandp As IntPtr, ByVal filename As String) As Boolean
dibhand = dibhandp
bmpptr = GlobalLock(dibhand)
pixptr = GetPixelInfo(bmpptr)
SaveDIBAsFile(filename, bmpptr, pixptr)
End Function
' se tipi
Private dibhand As IntPtr
Private bmpptr As IntPtr
Private pixptr As IntPtr
'
Protected Function SaveDIBAsFile(ByVal picname As String, ByVal bminfo As IntPtr, ByVal pixdat As IntPtr) As Boolean
Dim clsid As Guid
If Not GetCodecClsid(picname, clsid) Then
MessageBox.Show("Unknown picture format for extension " + Path.GetExtension(picname), "Image Codec", MessageBoxButtons.OK, MessageBoxIcon.Information)
Return False
End If
Dim img As IntPtr = IntPtr.Zero
Dim st As Integer = GdipCreateBitmapFromGdiDib(bminfo, pixdat, img)
If (st < > 0) Or (Equals(img, IntPtr.Zero)) Then
Return False
End If
st = GdipSaveImageToFile(img, picname, clsid, IntPtr.Zero)
GdipDisposeImage(img)
Return st = 0
End Function

Jest upam da ti kej pride prav !!!

ql000 ::

Ma hec je v tem, ker uporabljam kamero od Unibrain-a. Oni drugače prodajajo SDK za cca. 200$, jaz pravim qrc jih gleda za teh 200$, ne dam jih! Oni so naredil kao example sam za C oz. C++, tam je izvedena polna implementacija, pa še lažje je z kazalci delat, funkcionalnosti knjižnjice v C-ju pa niso popolnoma prenesli na .net. Jaz sem kontaktiral njihov support, pa se mi zdi, da je tip samo copy paste naredil, sicer se je pa skliceval, da je to stvar directshow-a, ne pa njihove knjižnjice.

vecpani: se bom probal poglobit v tvoje delo, drugače bom pa naredil knjižnjico za pošiljanje slik v polje v C++, pa naredil dll, pa adijo.

Razen, če ma kdo kako drugo idejo!

vecpani ::

Če koda ni skrivnost mi jo prosim pošel na email.
Bi si jo rad pogledam, ker se dlih učim sintakso C#


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C#] pixel scan z Thread

Oddelek: Programiranje
121195 (977) perooo25
»

kako narediti program ki bere drugi program

Oddelek: Programiranje
465854 (4167) imagodei
»

Dll napisan v C++ importan v C# aplikacijo

Oddelek: Programiranje
113933 (3720) cikopero
»

[C#] Sesutje aplikacije

Oddelek: Programiranje
111645 (1480) Jean-Paul
»

[C#] unmanaged->managed code

Oddelek: Programiranje
112160 (2035) Zzzzzzz

Več podobnih tem