In unit V4L2 maak ik een foto m.b.v. Video For Linux 2 en vervolgens wil ik die foto in de Bitmap stoppen die meegegeven wordt als paramter by reference.
In een andere unit heb ik een gewone TBitmap aangemaakt. Deze parameter geef ik vervolgens mee aan GetPhotoHead(....);
Maar dit gaat helaas fout.Ik krijg de volgende foutmelding:
Access violation at address 0805456B, accessing address 00000000
Maar ik snap het niet. Ik heb die TBitmap eerst wel gecreeerd.
Nu is er wel een andere methode waarmee ik het wel werkend heb gekregen. Alleen dan maak ik steeds een nieuwe TBitmap aan bij het opvragen van een foto. Dat is niet de meeste mooie en snelste manier.
Weet iemand waar dit aan kan liggen?
In een andere unit heb ik een gewone TBitmap aangemaakt. Deze parameter geef ik vervolgens mee aan GetPhotoHead(....);
Maar dit gaat helaas fout.Ik krijg de volgende foutmelding:
Access violation at address 0805456B, accessing address 00000000
Maar ik snap het niet. Ik heb die TBitmap eerst wel gecreeerd.
Nu is er wel een andere methode waarmee ik het wel werkend heb gekregen. Alleen dan maak ik steeds een nieuwe TBitmap aan bij het opvragen van een foto. Dat is niet de meeste mooie en snelste manier.
Weet iemand waar dit aan kan liggen?
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| function TV4l2.GetPhotoHead(var PhotoBitmap: TBitmap): Cardinal; var Status: Integer; i: Integer; Row: Integer; PSL: PByteArray; begin Status := __read(fd, Bitmap.ScanLine[0]^, 640 * 480 * 4); if Status < 0 then begin Result := errno; Exit; end; i := Integer(PointerCropBuffer); for Row := 0 to 479 do begin PSL := Bitmap.ScanLine[Row]; Move(PSL^[179 * 4], Ptr(i)^, 360 * 4); i := I + 360 * 4; end; try Move(PointerCropBuffer^, (PhotoBitmap.ScanLine[0])^, 360 * 480 * 4); except on E: Exception do ShowMessage('Error: ' + E.Message); end; end; // het aanroepen gaat als volgt: var PhotoBitMap: TBitmap; PhotoBitmap := TBitmap.Create; V4L2.GetPhotoHead(PhotoBitmap); |