Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Thread mit komischem Verhalten (https://www.delphipraxis.net/187951-thread-mit-komischem-verhalten.html)

Luckie 19. Jan 2016 11:55

AW: Thread mit komischem Verhalten
 
Zitat:

Zitat von Sir Rufo (Beitrag 1327442)
Delphi-Quellcode:
TCanvas
ist nicht thread-safe und kann auch nicht thread-safe verwendet werden (intern gibt es da globale Abhängigkeiten) und darum ist
Delphi-Quellcode:
TBitmap
nicht thread-safe.

OK, das erklärt es. Man könnte dann aber auf die Windows API Bitmap Funktionen zurückgreifen und so die Klasse TCanvas vermeiden.

himitsu 19. Jan 2016 12:33

AW: Thread mit komischem Verhalten
 
manuell in den ScanLines kann man auch rumhantieren, bzw auf dem HDC ohne die Funktionen des TCanvas (wie Luckie anregte), aber da natürlich nur TCanvas.Handle zusammen mit Delphi-Referenz durchsuchenTCanvas.Lock.

Schwedenbitter 19. Jan 2016 13:46

AW: Thread mit komischem Verhalten
 
Ich ändere doch gar nichts am Bitmap. Ich lade lediglich die Datei, um dann mittels
Delphi-Quellcode:
TPngImage.Assign();
aus dem Bitmap eine PNG zu machen und diese dann zu speichern.

Ich habe jetzt den Units runtergeladen, um TBitmap32 nutzen zu können. Allerdings weigert sich das laufende Programm - der Compiler bringt keinen Fehler -, die Bilddaten mittels Assign an ein TPngImage weiterzugeben. Ich bilde mir ein, gestern Abend bei meinen Recherchen so etwas wie ein ein passendes PNG gesehen zu habe. Ich finde das aber irgendwie nicht wieder.

Kann mir dabei jemand noch helfen?
Hier hat leider niemand mehr geantwortet.

Pfaffe 19. Jan 2016 14:43

AW: Thread mit komischem Verhalten
 
Schau mal hier vorbei http://sourceforge.net/projects/gr32pnglibrary/

himitsu 19. Jan 2016 14:54

AW: Thread mit komischem Verhalten
 
Zitat:

Zitat von Schwedenbitter (Beitrag 1327482)
Ich ändere doch gar nichts am Bitmap. Ich lade lediglich die Datei,

Lesen oder Schreiben ... du greifst multithreaded auf Dinge zu, die nicht threadsave sind.

Auch beim Lesen gibt es manchmal Schreibzugriffe (1), bzw. es knallt, wenn man was lesen will, daß jemand anderes grade verändern täte.

1) Gutes Beispiel sind (File)Streams. Da wird der Lesezeiger/Position veändert, während man liest. (außer man verwendet die entsprechenden asynchronen Lesefunktionen)

Schwedenbitter 19. Jan 2016 17:13

AW: Thread mit komischem Verhalten
 
Zitat:

Zitat von Pfaffe (Beitrag 1327490)

Danke. Das funktioniert perfekt.
Gibt es dazu auch ein Pendant für JPG? Ich suche schon eine ganze Weile. Und alles was ich bislang dazu gefunden habe basiert darauf, dass TBitmap32 zunächst zu einem TBitmap assigned und dieses wiederum zu einem TJPEGImage assigned wird.
Damit habe ich aber wieder das TBitmap drinnen, was mir gerade die Probleme mit dem Thread verursacht :(

Medium 19. Jan 2016 18:08

AW: Thread mit komischem Verhalten
 
Natürlich, den Canvas muss man in Threads locken. Beim Assign() wird, wenn ich das richtig vermute, wohl auch über den Canvas gearbeitet (bzw. dessen Handle via BitBlt o.ä.). Davon bin ich ausgegangen, sorry.
Ließe sich damit evtl. nicht auch das Problem von Schwedenbitter lösen? Auch müsste noch geklärt werden, wie sich ggf. TPNGImage in einem Thread verhält.

Sir Rufo 19. Jan 2016 18:25

AW: Thread mit komischem Verhalten
 
Haben wir schon alles durchgekaut :stupid:

http://www.delphipraxis.net/186810-t...-bitmap-4.html

Schwedenbitter 19. Jan 2016 20:13

AW: Thread mit komischem Verhalten
 
Zitat:

Zitat von Schwedenbitter (Beitrag 1327515)
Gibt es dazu auch ein Pendant für JPG? Ich suche schon eine ganze Weile. (...)

Scheinbar gibt es hier etwas, was funktionieren könnte. Leider sind die Links auf der Seite vom Entwickler irgendwie alle tot, obwohl das letzte Update vom 8. Juni 2015 stammen soll.

[OT] Kann mir jemand sagen, wie man dieses Verzeichnis runterladen kann, ohne jede einzelne Datei anklicken zu müssen?[/OT]

Schwedenbitter 19. Jan 2016 22:50

AW: Thread mit komischem Verhalten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe jetzt 2 Versionen von Hand heruntergeladen :-D
Die benötigten Dateien habe ich isoliert, compiliert etc. Das Programm lässt sich compilieren.
Allerdings bekomme ich jetzt beim
Delphi-Quellcode:
TsdJpegGraphic32.Assign(TBitmap32);
die Fehlermeldung
Zitat:

Can't allocate the DIB handle.
Wie finde ich die Ursache heraus?

Ich vermute, dass der Entwickler eine ältere Version von GR32 genutzt hat und diese Versionen nicht mehr kompatibel sind. Ich habe den Quellcode inkl. den zugehörigen Dateien mal angehängt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 Uhr.
Seite 2 von 2     12   

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