/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Data Translation grabberkort
Fra : Toke Eskildsen


Dato : 10-03-05 14:03

Jeg sidder og prøver at få Delphi 7 til at snakke med Data Translations
grabberkort DT3154. Jeg benytter deres ActiveX komponent, sætter kortet
op som manualen foreskriver og prøver derefter

1) Grab en frame og tegn den på et vindue.
Dette sker ved at grabbe og derefter kalde
DrawAcquiredFrame(Handle, FrameID);
Det virker glimrende, billedet bliver grabbet og tegnet.

2) Grab en frame og udtræk data til et array.
Dette sker ved at grabbe som ovenfor og med kaldet
myResult:= ReadFrameEx(frame, 1, 1, 767, 575)
No go, der smides en exception: "Access violation at address blablabla
in module 'MitTestProgram.exe'. Read og address 00000000".

3) Grab en frame og gem den som BMP.
Dette sker ved at grabbe som ovenfor og med kaldet
SaveAcquiredFrame(FrameID, 'f:\grab.bmp')
Afhængigt af vindretningen går programmet ned eller kører videre.
Der gemmes ingen bitmapfil.

Jeg har prøvet på to forskellige maskiner med samme resultat.


Hvis ikke lige det var fordi jeg kunne tegne billedet på et vindue,
ville jeg tro at det skyldes simpel fejlopsætning. Er der nogen der har
arbejdet med Data Translation kort, som kan give et par hints til
hvordan man tilgår dem?
--
Toke Eskildsen - http://ekot.dk/

 
 
Michael Reiler (11-03-2005)
Kommentar
Fra : Michael Reiler


Dato : 11-03-05 12:06

Hej Toke

Jeg kender intet til produktet, men i 2) kunne det måske være fordi du
ikke
har reserveret plads til array'et?

Skal det ikke creates eller lignende ?

Michael


"Toke Eskildsen" <darkwing@daimi.au.dk> skrev i en meddelelse
news:Xns96158EEA59C76tokeeskildsen@130.133.1.18...
> Jeg sidder og prøver at få Delphi 7 til at snakke med Data Translations
> grabberkort DT3154. Jeg benytter deres ActiveX komponent, sætter kortet
> op som manualen foreskriver og prøver derefter
>
> 1) Grab en frame og tegn den på et vindue.
> Dette sker ved at grabbe og derefter kalde
> DrawAcquiredFrame(Handle, FrameID);
> Det virker glimrende, billedet bliver grabbet og tegnet.
>
> 2) Grab en frame og udtræk data til et array.
> Dette sker ved at grabbe som ovenfor og med kaldet
> myResult:= ReadFrameEx(frame, 1, 1, 767, 575)
> No go, der smides en exception: "Access violation at address blablabla
> in module 'MitTestProgram.exe'. Read og address 00000000".
>
> 3) Grab en frame og gem den som BMP.
> Dette sker ved at grabbe som ovenfor og med kaldet
> SaveAcquiredFrame(FrameID, 'f:\grab.bmp')
> Afhængigt af vindretningen går programmet ned eller kører videre.
> Der gemmes ingen bitmapfil.
>
> Jeg har prøvet på to forskellige maskiner med samme resultat.
>
>
> Hvis ikke lige det var fordi jeg kunne tegne billedet på et vindue,
> ville jeg tro at det skyldes simpel fejlopsætning. Er der nogen der har
> arbejdet med Data Translation kort, som kan give et par hints til
> hvordan man tilgår dem?
> --
> Toke Eskildsen - http://ekot.dk/




Toke Eskildsen (11-03-2005)
Kommentar
Fra : Toke Eskildsen


Dato : 11-03-05 14:20

Michael Reiler wrote:

> Jeg kender intet til produktet, men i 2) kunne det måske være
> fordi du ikke har reserveret plads til array'et?
>
> Skal det ikke creates eller lignende ?

ReadFrameEx(frame, 1, 1, 767, 575)
er et funktionskald, som returnerer et array.

Jeg burde have skrevet
ReadFrameEx(FrameID, 1, 1, 767, 575)
i stedet, det er tydeligere: FrameID er blot en integer, der peger på
en buffer som kortet holder styr på. ReadFrameEx er den autoriserede
måde at kopiere indholdet af den buffer ud.

Jeg kan med andre ord ikke allokere noget.


Der er et ældre "deprecated" kald ReadFrame, der tager en allokeret
hukommelsesblok som argument. Problemet er imidlertid at manualen ikke
beskriver dette kald, så det eneste jeg har er dets definition:

procedure ReadFrame(SrcFrame: Integer; Left: Integer; Top: Integer;
Width: Integer; Height: Integer; Data: OleVariant); safecall;

Jeg har prøvet at oprette Data i form af etarray med
VarArrayCreate([0, <lidtafhvert>], varByte)
og har fodret den med det.

Der sker lidt mere: Jeg får ca. 1/4 af billedet. Jeg har også prøvet at
lave wordarrays og integerarrays og har forsøgt med forskellige
størrelser. Samme resultat: 1/4 af billedet.


Måske har jeg misforstået noget med OleVariant. Kan jeg på en eller
anden måde allokere en rå hukommelsesblok og få en pointer til den til
at være OleVariant? Er det ikke det jeg i praksis har gjort med array-
tingen?
--
Toke Eskildsen - http://ekot.dk/

Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409074
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste