Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TImage überlastet ? (https://www.delphipraxis.net/40192-timage-ueberlastet.html)

DataCool 12. Feb 2005 02:39


TImage überlastet ?
 
Hi Leute,

vorweg erstmal den Workaround :
Es geht um Bildübertragung und Anzeige der empfangenen Bilder!

Das Problem:
In einer alten Version meines Programms habe ich die empfangenen Bilder, in einem TImage innerhalb der Main-Form angezeigt.
Die Bilder habe ich innerhalb eines seperaten Threads empfangen und diese dann aus dem Thread in das Image gespielt :

Code:

(*

  Thread holt Bild ....
  Synchronize(PaintImage);

*)

procedure TVideoStreamThread.PaintImage;
begin
  DrawImage.Picture.Assign(aktPic);
end;
Das lief alles wunderbar !

Jetzt in der neu Version meines Programms habe ich das Bild in eine seperate Form(nicht Main-Form) ausgelagert.
Wenn ich jetzt innerhalb meines Threads mit Syncronize arbeite steht alles.
Lasse ich es weg, läuft es sogar noch etwas schneller als in der alten Version.
Jetzt bekomm ich aber von einigen Beta-Tester, immer wieder Hinweise von sporadischen, aber doch sehr häufigen Fehlermeldungen, diese gehen von "Ungültige Zeigeroperation", über einfache "Zugriffsverletzungen" bishin zu "Abstrakten Fehlern".
Die Bildübertragung ist eigentlich exakt der gleiche Code wie in der vorgänger-Version, einziger Unterschied :
- Kein syncronite des PaintImage, weil Image nicht auf der Main-Form sitzt.

Ich hab das ganze jetzt auch mal durch Logfile nachvollziehen können, es knallt wirklich mit den oben genannten Fehlermeldungen immer im PaintImage.

Hat jemand ne Ahnung oder nur den Ansatz einer Idee, wo da der Hund begraben liegt ?

Thx Data

jfheins 12. Feb 2005 08:57

Re: TImage überlastet ?
 
Im synchronize :mrgreen:
Die VCL ist nicht Threadsafe. Wenn du es ohne synchronize machen möchtest, musst du API-Funktionen verwenden, wie z.B. MSDN-Library durchsuchenStretchBlt

Gandalfus 12. Feb 2005 09:07

Re: TImage überlastet ?
 
Delphi-Quellcode:
canvas.lock
canvas.unlock

DataCool 12. Feb 2005 17:45

Re: TImage überlastet ?
 
Hi,

@Gandalfus:
Canvas.lock und Canvas.unlock habe ich probiert, es zeichnet sich kein einziges Bild:!

@jfheins:
Das die VCL nicht Threadsafe ist, ist mir auch klar !
Die hab ich in der alten Version meines Progs(wo das Image ja auf der Main-Form war) mit syncronize gearbeitet, obwohl nur im ein Thread das Bild liefert.
In der neuen Version habe ich auch nur einen Thread der Bilder besorgt, wie gesagt nur das Image liegt jetzt nicht auf der Main-Form, ich kann nicht wirklich verstehen oder glauben, das es an der VCL liegen sollte.
Aber ich werds mal mit der API testen.
Probieren geht über studieren.

Thx an beide,

Data

Nachtrag: Die Bilder sind keine Bmps sondern Jpgs und nun ? Jedesmal vorher umwandeln ?

DataCool 14. Feb 2005 01:22

Re: TImage überlastet ?
 
Push :duck:

@jfheins:
Hab das mit StretchBlt und jpg nicht hinbekommen, ne ahnung wie ich da ansetzen muss, worauf zeichne ich den dann ?

Gruß Data


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz