Thread und Jpeg Operationen möglich ?

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Thread und Jpeg Operationen möglich ?

Beitrag von af0815 »

Hallo,

ich müsste zwei Operationen in einen Thread im Hintergrund laufen lassen (RasPi Linux, gtk2).

Frage 1, wie kann ich Text in ein JPEG Bild bringen, wenn das ganze in einem Hintergrundsthread läuft.

Code: Alles auswählen

      try
        AImage:= TJPEGImage.Create;
        AImage.LoadFromFile(TempFilename);
        AImage.Canvas.Font.Size:= coCamTextHeight;
        AImage.Canvas.TextOut(coCamTextX,coCamTextY,coCamTextPre+XCode);
        try
          AImage.SaveToFile(TempFilename);
        except
          FLastError :=({$I %FILE%} + '->' +{$I %CURRENTROUTINE%}+ ' Kann Datei nicht speichern ' + TempFilename );
          DebugLn(FLastError);
        end;
      finally
        AImage.free
      end;
Der Code geht nicht, weil das TJPEGImage nicht Threadfest in gtk ist.
Falls es wen interessiert, der Fehler lautet.
[xcb] Unknown request in queue while dequeuing
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
Die Thread's kenne ich
viewtopic.php?t=7525
viewtopic.php?p=51688#p51688

Deswegen auch die Frage geht dieses einfügen eines Textes in ein Jpeg-Bild mit FPImage auch im Thread ?!

Die zweite Frage, ist fpexif threadfest ?
Das geht scheinbar im Thread, ist aber das alte dExif. Ich würde es gerne auf fpExif umschreiben, deswegen die Frage ob der Code auch in einem Hintergrundsthread laufen kann ?

Code: Alles auswählen

      // Read EXIF tags from image file
      if FileExists(TempFilename) then begin
        ImgData:= TImgData.Create;
        try
          ImgData.ProcessFile(TempFilename);
          // if not exif, create new
          if not ImgData.HasExif then
            ImgData.CreateExifObj;
          ImgData.ExifObj.CameraModel:='MyKamera';
          ImgData.ExifObj.DateTimeOriginal:= Now;
          ImgData.ExifObj.Artist:='Ich bin es' ;
          if (XCode= '') then
            ImgData.ExifObj.CameraMake:= FilenameOnly
          else
            ImgData.ExifObj.CameraMake:=XCode;
          ImgData.ExifObj.ExifComment:=XCode;
          ImgData.Comment := FilenameOnly;
           ImgData.WriteEXIFJpegTo(TempFilename);
        finally
          freeandnil(ImgData);
        end;
      end;
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Thread und Jpeg Operationen möglich ?

Beitrag von theo »

af0815 hat geschrieben:
Mo 20. Mär 2023, 10:37
Deswegen auch die Frage geht dieses einfügen eines Textes in ein Jpeg-Bild mit FPImage auch im Thread ?!
Die Frage wäre eigentlich: Wie füge ich einen Text ein mit FPImage? :lol:
Dafür muss man halt Freetype bemühen, da das ganze X und Gui Zeug nicht zugreifbar ist.
https://wiki.freepascal.org/fcl-image#Drawing_text
Dann sollte es Threadsafe sein, afaik.

Bei Exif weiss ich es nicht genau, glaube aber, dass das nur auf dem File/Stream herumkratzt und kein X benötigt.
Daher wahrscheinlich Threadsafe.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Thread und Jpeg Operationen möglich ?

Beitrag von af0815 »

theo hat geschrieben:
Mo 20. Mär 2023, 11:31
Bei Exif weiss ich es nicht genau, glaube aber, dass das nur auf dem File/Stream herumkratzt und kein X benötigt.
Daher wahrscheinlich Threadsafe.
Bei dExif kenne ich mich so halbwegs aus. Bei fpExif muss ich noch hineinschauen, aber ich vermute das es keine Probleme geben wird. Wie du sagst, ist ja eine reine herumkratzerei in den Daten.

Nachdem ich mir den Link von dir angesehen habe und zuerst nicht verstanden haben, wieso du von FreeType sprichst, habe ich dann erst geshen, das ja der Font den ganzen X-Sch.. hineinzieht. Das habe ich komplett aus dem Augen verloren gehabt, das es ja einen Font geben muss. Ok, ist so wie der Strom aus der Steckdose fürs Handy auch keine Kraftwerke braucht :-)

Manchmal ist man wirklich blind.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Thread und Jpeg Operationen möglich ?

Beitrag von theo »

af0815 hat geschrieben:
Mo 20. Mär 2023, 12:50
Nachdem ich mir den Link von dir angesehen habe und zuerst nicht verstanden haben, wieso du von FreeType sprichst, habe ich dann erst geshen, das ja der Font den ganzen X-Sch.. hineinzieht. Das habe ich komplett aus dem Augen verloren gehabt, das es ja einen Font geben muss. Ok, ist so wie der Strom aus der Steckdose fürs Handy auch keine Kraftwerke braucht :-)
Genau.
Etwas einfach gesagt: Sobald die Unit "Graphics" involviert ist, kommt die Grafik des Betriebssystems ins Spiel und das wäre in diesem Fall ja nicht erwünscht.
Der normale TFont ist ja auch dort drin deklariert.

Antworten