OPBitmap 1.0

Zur Vorstellung von Komponenten und Units für Lazarus

Beitragvon pluto » 9. Feb 2007, 16:33

du könntest ja sows wie BitMap32 klasse machen von Delphi oder ?
eine komplette klasse die mehr kann als die stand art und auch besser kann als die stand art klasse.

ich hoffe du weißt wie ich das meine !
MFG
Michael Springwald
Aktuelles Projekt: ContentManager2(Ehmals NoteManager2).
pluto
Lazarusforum e. V.
 
Beiträge: 6997
Registriert: 19. Nov 2006, 13:06
Wohnort: Oldenburg(Oldenburg)
OS, Lazarus, FPC: Linux Mint 19.2 | 
CPU-Target: AMD
Nach oben

Beitragvon theo » 9. Feb 2007, 16:49

Tja, ich habe mich mal auf das beschränkt, was mein Ziel war, nämlich Bilddateien lesen.
Du kannst den Canvas gerne erweitern, aber das war eigentlich nicht das Ziel.
Sobald das Bild geladen ist, kannst du es einem Lazarus Bitmap zuweisen und mit dessen Canvas Methoden weiterarbeiten.
Das gleiche gilt für Bitmap32. OPBitmap kann aber nicht nur 32 ;-)
Natürlich könnte man es als Grundlage für alles Mögliche nehmen,
Aber vieles gibt's ja schon und lässt sich wahrscheinlich recht effizient kombinieren.
theo
 
Beiträge: 8172
Registriert: 11. Sep 2006, 19:01

Beitragvon Christian » 9. Feb 2007, 17:22

Du kannst doch auch beim lazarus TPicuture transparenz mit mehr als einer 1 bit maske verwenden pluto
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Christian
Lazarusforum e. V.
 
Beiträge: 6084
Registriert: 21. Sep 2006, 07:51
Wohnort: Dessau
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z) | 
CPU-Target: AVR,ARM,x86(-64)
Nach oben

Beitragvon pluto » 9. Feb 2007, 21:42

wie das den ?
habe ich noch nie gemacht!
ich dachte die Tbitmap kann sowas nicht !
Dort habe ich bis jetzt nur sowas gefunden wie Tranzparent an und mit der angeben Farbe wobei das kein durchschmmern tranzparent ist !

Kannst du mir davon mal ein beispiel geben ?
MFG
Michael Springwald
Aktuelles Projekt: ContentManager2(Ehmals NoteManager2).
pluto
Lazarusforum e. V.
 
Beiträge: 6997
Registriert: 19. Nov 2006, 13:06
Wohnort: Oldenburg(Oldenburg)
OS, Lazarus, FPC: Linux Mint 19.2 | 
CPU-Target: AMD
Nach oben

Beitragvon Euklid » 9. Feb 2007, 21:51

Hey Theo!

Alles Gute zu deinem Geburtstag auch von mir!

Bei deinem Tool begeistert mich besonders die Qualität des Resamplings. Die Bilder werden ja kein bisschen Pixelig...


Viele Grüße, Euklid
Euklid
 
Beiträge: 2746
Registriert: 22. Sep 2006, 10:38
Wohnort: Hessen

Beitragvon Christian » 9. Feb 2007, 23:47

@Pluto die Lazarus TBitmap kann das inern schon die Delphi bitmap kanns nicht ... png kann ja auch echte transparenz und das auch mit den fpc reader /writer routinen
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Christian
Lazarusforum e. V.
 
Beiträge: 6084
Registriert: 21. Sep 2006, 07:51
Wohnort: Dessau
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z) | 
CPU-Target: AVR,ARM,x86(-64)
Nach oben

Beitragvon theo » 10. Feb 2007, 07:30

Euklid hat geschrieben:Hey Theo!
Alles Gute zu deinem Geburtstag auch von mir!

Danke!
Euklid hat geschrieben:Bei deinem Tool begeistert mich besonders die Qualität des Resamplings. Die Bilder werden ja kein bisschen Pixelig...

Danke. Aber diese Lorbeeren gehen an Anders Melander und Mike Lischke.
Mein eigentlicher Beitrag ist die Umwandlung der Pixelformate (inkl. Farb-Quantisierung), und das VCL ähnliche Design, welches den "Einbau" des Resampling Codes ermöglicht.
Überhaupt ist OPBitmap dazu da, alle möglichen Delphi Grafik Codes für X-Platform/Compiler verfügbar zu machen.
Siehe http://www.theo.ch/lazarus/opexe.zip
Und klar: Für euch habe ich nur die besten Codes ausgewählt ;-)
theo
 
Beiträge: 8172
Registriert: 11. Sep 2006, 19:01

Beitragvon schnullerbacke » 15. Feb 2007, 17:05

@theo

Hast Du bei der opexe GIFImage von A. Mellander direkt benutzt?

Wenn ja, dann müssen wir uns da was für das timing bei den animated GIF's einfallen lassen. Die werden bei Win32 zu schnell abgespielt. Das kenn ich aber schon. Entweder muß man das in Anders Quelle direkt ändern (findet sich ziemlich am Anfang bei Mozilla, da muß man den Wert reduzieren) oder wir müssen mal über IFDEF's nachdenken. Das rast sonst mit dem 10fachen Tempo durch.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)
schnullerbacke
 
Beiträge: 1189
Registriert: 13. Dez 2006, 11:58
Wohnort: Hamburg
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z) | 
CPU-Target: AMD A4-6400 APU
Nach oben

Beitragvon theo » 15. Feb 2007, 17:10

schnullerbacke hat geschrieben:@theo
Hast Du bei der opexe GIFImage von A. Mellander direkt benutzt?


Nö, die ist mir zu VCL/Windows lastig. Ich habe John M. Miano's GIFimage zum lesen verwendet.
Das ist so ne Sache mit den AniGIF Tempi. Da waren sich früher nicht mal die Webbrowser einig ;-)
theo
 
Beiträge: 8172
Registriert: 11. Sep 2006, 19:01

Beitragvon schnullerbacke » 15. Feb 2007, 17:30

Ist auch noch so, im Mozilla werden die schneller abgespielt als beim ie. Bei Mellanders GIFImage rauscht das Ding unter Delphi wie beim Mozilla durch und flickert dadurch. Das ist bei deiner opexe aber auch so, wie ich gerade gesehen hab.

Bei Mellander's hab den Delay von 3 auf 20 raufgesetzt, dann sieht es ordentlich aus.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)
schnullerbacke
 
Beiträge: 1189
Registriert: 13. Dez 2006, 11:58
Wohnort: Hamburg
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z) | 
CPU-Target: AMD A4-6400 APU
Nach oben

Beitragvon theo » 15. Feb 2007, 17:44

Ist auch bei der vorliegenden Version mit Faktor 10 multipliziert. Die Delays sind aber vom Gif definiert. Also fixe Werte würde ich nicht nehmen.
Und dann kommt's noch auf's GIF an. Meine Test GIF's laufen vernünftig.
Vielleicht ist dein GIF auch etwas seltsam... ;-)
Aber da reiss ich mir im Moment kein Bein aus.
theo
 
Beiträge: 8172
Registriert: 11. Sep 2006, 19:01

Beitragvon schnullerbacke » 15. Feb 2007, 18:09

:lol:

Dann liegt das wohl an meiner Maschine. Die machen das alle so. Guck dir mal das im Attach an. Wenn dem Herren der Lolli nicht vor's Gesicht klatscht, dann ist es zu schnell. :lol:

Hast Du die GraphicEX von Mike Lischke verwendet?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)
schnullerbacke
 
Beiträge: 1189
Registriert: 13. Dez 2006, 11:58
Wohnort: Hamburg
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z) | 
CPU-Target: AMD A4-6400 APU
Nach oben

Beitragvon theo » 15. Feb 2007, 18:23

schnullerbacke hat geschrieben:Dann liegt das wohl an meiner Maschine. Die machen das alle so. Guck dir mal das im Attach an. Wenn dem Herren der Lolli nicht vor's Gesicht klatscht, dann ist es zu schnell. :lol:


Das Tempo ist bei mir schon richtig, aber ich habe die Verzögerung am falschen Ort eingebaut.
Es wartet nach dem letzten Bild nicht. Das kann ich leicht ändern.
Die reinste Tüftlerei mit diesen AniGIFs, das mache ich später mal noch besser.

schnullerbacke hat geschrieben:Hast Du die GraphicEX von Mike Lischke verwendet?

Auch, aber nicht für GIF, PNG, JPEG, BMP
theo
 
Beiträge: 8172
Registriert: 11. Sep 2006, 19:01

Beitragvon schnullerbacke » 21. Feb 2007, 13:20

@theo

Hast Du denn dafür schon ein TGIFImage von TGraphic abgeleitet? Nicht das ich jetzt das Rad nochmal erfinde.

Und welche anderen Formate fehlen dann noch?
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)
schnullerbacke
 
Beiträge: 1189
Registriert: 13. Dez 2006, 11:58
Wohnort: Hamburg
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z) | 
CPU-Target: AMD A4-6400 APU
Nach oben

Beitragvon theo » 21. Feb 2007, 15:08

schnullerbacke hat geschrieben:@theo
Hast Du denn dafür schon ein TGIFImage von TGraphic abgeleitet? Nicht das ich jetzt das Rad nochmal erfinde.
Und welche anderen Formate fehlen dann noch?


Verstehe deine Frage nicht wirklich. Welches Rad willst du denn nochmal erfinden?
Grundsätzlich kannst du wählen, ob du OpBitmap von TGraphic ableiten willst.
Es gibt dazu einen Switch in OpBitmap.pas:

{$DEFINE IMPORTTGRAPHIC}//Import TGraphic Class
In diesem Moment bindest du aber die Graphics.pas ein, und dadurch natürlich Abhängigkeiten von der LCL.

Ich nehme jetzt mal an du sprichst von AniGif?
Prinzipiell bietet der GIF-Reader alle Informationen die zum darstellen von AniGIF gebraucht werden.
Aber es ist nicht fixfertig gekapselt. Du kannst also z.B. mit Threads oder Timer arbeiten.

In der Demo, die ich mal gemacht habe, sieht Gif-Thread-Execute so aus:

Code: Alles auswählen
procedure TGifThread.Execute;
var gif: TGifDecoder;
  repeatmode: boolean;
begin
  try
    try
      repeatmode := false;
      fimage := TOPBitmap.Create;
      gif := TGifDecoder.Create;
      gif.Verbose := false;
      gif.MultiImageMode := true;
      repeat
        gif.Reset; ;
        gif.ReadImageFile(FileName, image);
       if TransparentColorFlag(gif.graphicCtrlblock) then
        image.TransparentColor := image.ColorTable^[gif.GraphicCtrlBlock.transparent_color];
       UpdateDims(gif.GifImgDescriptor);
        fFirstWidth:=fWidth;
        fFirstHeight:=fHeight;
        if not Terminated then Synchronize(@Update);
        if gif.moreImages and gif.MultiImageMode then repeatmode := true;
        if repeatmode then sleep(gif.GraphicCtrlBlock.delay_time * 10);
        while gif.moreImages and gif.MultiImageMode and (not Terminated) do
        begin
          if not Terminated then gif.readNextImage(image);
          if TransparentColorFlag(gif.graphicCtrlblock) then
          image.TransparentColor := image.ColorTable^[gif.GraphicCtrlBlock.transparent_color];
          fDisposalMethod := DisposalMethod(gif.GraphicCtrlBlock);
          UpdateDims(gif.GifImgDescriptor);
          if not Terminated then Synchronize(@Update);
          sleep(gif.GraphicCtrlBlock.delay_time * 10);
        end;
      until (not repeatmode) or Terminated;
    except
      Terminate;
    end;
  finally
    image.Destroy;
    gif.Destroy;
  end;
end;


Ist also bis zum letzten Moment alles völlig "losgelöst" vom Widgetset.
theo
 
Beiträge: 8172
Registriert: 11. Sep 2006, 19:01

» Weitere Beiträge siehe nächste Seite »
VorherigeNächste

Zurück zu Units/Komponenten



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried