Autor Beitrag
tom334
Hält's aus hier
Beiträge: 1


D6
BeitragVerfasst: Di 02.03.04 14:42 
Hallo,
vielleicht könnt ihr mir ja helfen. Ich möchte ein Bild in einer Paintbox darstellen. Das Bild bekomme ich aus einer Funktion von der ich nur die Rückgabeparameter kenne. Das sind Pointer auf die Bildhöhe, die Bildweite und auf ein VideoPicture. Diese Funktion heißt 'imageget(var buffy: TBitmap, var x, y: integer)'. Buffy ist ein Pointer auf eine Speicherstelle, um das Videobild aufzunehmen.
Nach der Speicherreservierung mit GetMem wird die Funktion 'imageget' auch erfolgreich ausgeführt. DieWerte x und y werden richtig zurückgegeben. Nur wenn ich jetzt das Bitmap darstellen möchte stürzt mein Programm mit folgeneder Fehlermeldung ab: 'Access violation at adress... . Read of adress...'.
Mir scheint es, dass ich den Pointer nicht mehr derefenzieren kann, dass das Programm irgendwas ausliest. Habe ich mit dem Pointer aud das Bitmap etwas falsch gemacht?

Danke in voraus.

tom334


Der Quellcode für die Darstellung des Bildes lautet momentan:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
var bild: TBitmap;
      x, y: integer;

    buffy: ^TBitmap;

begin

  bild := TBitmap.Create;

  // reserviert Speicher für Bitmap >1,4MByte
  GetMem(buffy, $1F0000);

  // Schreibt Bild in den Speicher; buffy ist Pointer auf das Bild
  cam.imageget(buffy^, x, y); //                                                    <- FUNKTION DIE DAS VIDEOBILD LIEFERT

  // Soll Bitmap darstellen
  PaintBox1.Canvas.Draw(0,0,buffy^); //                                       <- Stelle an der das Programm abbricht

  // Zeigen Weite und Höhe des Bitmap an
  ShowMessage('Weite: '+inttostr(x)+' Höhe: '+inttostr(y));

  FreeMem(buffy);

end;


Moderiert von user profile iconPeter Lustig: Delphi-Tags hinzugefügt
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Mi 03.03.04 00:01 
Moin.


Also irgendwie komme ich da nicht mit :cry: ...warum createst du das TBitmap wenn dues überhaupt nicht verwendest?

Ich schreib die procedure mal so wie, wie sie sinn machen wurde:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var bild: TBitmap; 

begin 

bild := TBitmap.Create; 
try

  cam.imageget(bild); 

  PaintBox1.Canvas.Draw(0,0,bild); // du musst hier schon ein gültiges TPicture object übergeben, und nicht irgendeinen selbst gebauten speicherbereich

  ShowMessage('Weite: '+inttostr(bild.width)+' Höhe: '+inttostr(bild.height)); 
finally
  bild.free;
end;


Das mit dem eigenen speicher kann so nicht funtzen :wink:

PS: willkommen im forum :D


end;

_________________
mfg.
mâximôv