Autor Beitrag
Slush
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 22.06.11 16:01 
Ich habe ein seltsames Problem:

Ich wollte die einzelnen Frames eines Videos als BitMap extrahieren und dann miteinander vergleichen (um eine Bewegunsanalyse durchzuführen, aber darum gehts jetzt erstmal nicht =D).

Um die Frames zu extrahieren hab ich diesen Ansatz hier genommen:
www.swissdelphicente...showcode.php?id=1180

Darin wird eine temporäres TBitMap verwendet um den Frame zu speichern:
ausblenden Delphi-Quelltext
1:
TmpBmp.SaveToFile(ToFileName);					

ich wollte das eigendlich weiter verwenden, also hab ich die Funktion ein TBitMap zurückgeben lassen und eben mit
ausblenden Delphi-Quelltext
1:
result:=TmpBmp					

das BitMap zurückgeben lassen.

Jetzt kommt das komische:
Wenn ich in der Funktion selbst unter das result:= TmpBmp result in einem TImage malen lassen will, geht dass. Wenn ich jezt aber die einem TBitMap diese Funktion zuordne und das eben dieses TBitMap zeichnen lassen will geht das aus irgend einem Grund nicht.
Also:
ausblenden Delphi-Quelltext
1:
2:
result:=TmpBmp;
Image1.canvas.draw(1,1,result);

geht, aber außerhalb der Funktion:
ausblenden Delphi-Quelltext
1:
2:
f1:=GrabAviFrame(Quelle,Position);
Image1.canvas.draw(1,1,f1);

geht nicht!
Da steht dann "class EAccessViolation with message 'Access violation at address 0041D677 in module 'Project1.exe'. Read of address 0000001C'."

Hat jemand ne Idee?

Moderiert von user profile iconNarses: Highlight- durch Delphi-Tags ersetzt
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 22.06.11 16:10 
Halo und :welcome: in der Entwickler-Ecke,

in dem verlinkten Code wird das temporäre Bitmap wieder freigegeben, ich schätze mal, dass das daran liegt. Innerhalb der Funktion selbst könnte der Zugriff darauf dann noch klappen, aber eigentlich ist es auch da schon weg. ;-)

_________________
We are, we were and will not be.
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Mi 22.06.11 16:12 
Ist f1 auch vom typ TmpBmp? und wo erstellst du es, damit Du die infos auch dort übergeben kannst.
Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
Slush Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 22.06.11 16:16 
Danke für die schnellen Antworten

@ALF: Ich glaube ich hab mich falsch ausgedrückt. Die Variable heißt TmpBmp, sie ist vom Typ TBitMap, wie f1 auch. f1 ist für die ganze Unit und wird im Form.create erstellt.

@Gausi: Ich werde mal versuchen eine "Zwischenvariable" zu benutzen, damit das Bitmap nicht zersört wird. Danke für den Tipp, da wäre ich nie drauf gekommen!
[Edit: Ich habs probiert, es funktioniert noch immer nicht. (Ich hab erst TmpBmp in einer globalen Variablen gespeichert und die dann result zugewiesen)]
[Edit2: Jetzt hab ich die lokale Variable ganz durch eine globe ersetzt und siehe da, es funktioniert. Danke Gausi =D)]