AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte VCL-Bitmap Resampler
Thema durchsuchen
Ansicht
Themen-Optionen

VCL-Bitmap Resampler

Ein Thema von Renate Schaaf · begonnen am 16. Apr 2023 · letzter Beitrag vom 5. Mai 2023
Antwort Antwort
Renate Schaaf

Registriert seit: 25. Jun 2020
Ort: Lippe
114 Beiträge
 
Delphi 11 Alexandria
 
#1

VCL-Bitmap Resampler

  Alt 16. Apr 2023, 12:02
Nachdem mein Bitmap-Resampler im englischen Forum per Diskussion einige Verbesserungen erfahren hat, hab ich ihn mal auf GITHub hochgeladen.

https://github.com/rmesch/Repository-R.Schaaf

2 kleine Demos sind enthalten, sowie eine Doc, die erklärt wie das Skalieren von Bitmaps mit Filtern (Box, Bilinear, Bicubic, Lanczos) funktioniert.

Besonderheiten:
  1. Enthält eine parallele Routine, die die Skalierungszeit auf meinem System auf ca. 1/5 reduziert. Damit sind Zoom-Pans in Echtzeit möglich.
  2. Jeder Filter hat einen Default-Radius, der den gängigen Werten entspricht (z.B. wie Graphics32), aber der Radius kann beliebig verändert werden.
  3. Das Rechteck für den Bereich, der skaliert werden soll, hat Float-Werte für bessere Zooms.

Funktioniert für pf32Bit-Bitmaps. Es gibt Optionen für die Behandlung des Alpha-channels (ignorieren, unabhängig, vor-multiplizieren). Andere Filter können sehr einfach hinzugefügt werden. Unterstützt derzeit Delphi 10.x und höher.

Renate
Renate
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.858 Beiträge
 
Delphi 12 Athens
 
#2

AW: VCL-Bitmap Resampler

  Alt 16. Apr 2023, 19:38
Super!
Falls du denkst, das wäre auch sinnvoll per GetIt "auslieferbar" (dann bekommt es noch mehr
Aufmerksammkeit), kann ich dir gerne zeigen wie das geht.
  Mit Zitat antworten Zitat
Renate Schaaf

Registriert seit: 25. Jun 2020
Ort: Lippe
114 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: VCL-Bitmap Resampler

  Alt 16. Apr 2023, 21:08
Hi Turbomagic,

Danke!

Zitat:
Falls du denkst, das wäre auch sinnvoll per GetIt "auslieferbar"
Ich denke schon, wenn ich gefunden habe, wie man die globalen Variablen für die Threads loswird, ohne dass die Performance in den Keller geht.
Im Moment warte ich darauf, von irgendwem dafür ausgeschimpft zu werden.

..jetzt ist mir doch grad ne Idee dazu gekommen.

Renate
Renate

Geändert von Renate Schaaf (16. Apr 2023 um 21:11 Uhr)
  Mit Zitat antworten Zitat
Renate Schaaf

Registriert seit: 25. Jun 2020
Ort: Lippe
114 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: VCL-Bitmap Resampler

  Alt 19. Apr 2023, 14:17
Der parallele Resampler kann jetzt in mehreren gleichzeitig laufenden Threads benutzt werden. Man kann nun mehr als einen thread-pool erstellen und der parallelen Routine sagen, welchen sie benutzen soll.
Ich hab eine Demo "ThreadsInThreads" hinzugefügt, mit der man das austesten kann. Ist ein einfacher Thumbnail-Explorer. Gestern hing dieser sich noch machmal auf, wenn man das Verzeichnis zu schnell gewechselt hat, aber ich hoffe, dass das jetzt behoben ist.
Wäre sehr dankbar für eine Rückmeldung, wenn es immer noch passiert.

https://github.com/rmesch/Repository-R.Schaaf

Cheers,

Renate
Renate
  Mit Zitat antworten Zitat
Renate Schaaf

Registriert seit: 25. Jun 2020
Ort: Lippe
114 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: VCL-Bitmap Resampler

  Alt 24. Apr 2023, 11:22
Hab inzwischen einige Verbesserungen in https://github.com/rmesch/Repository-R.Schaaf eingebaut:
  • Threads werden nicht mehr automatisch in Initialization erzeugt. Man kann InitDefaultResamplingThreads aufrufen, um sie zu initialisieren, bevor man sie benutzt, oder sie werden initialisiert beim ersten Aufruf einer parallelen Routine, was dann eine Verzögerung erzeugt. FinalizeDefaultResamplingThreads gibt sie frei. Wenn man das vergisst, werden sie in Finalization freigegeben.
  • Übergebene Bitmaps mit Alphaformat=afDefined werden jetzt korrekt skaliert, und das Ergebnis hat das gleiche Alphaformat. Der Resampler funktioniert aber am besten mit Alphaformat=afIgnored. Man sollte Alphaformat nur setzen, bevor man eine Bitmap anzeigt, um Ungenauigkeiten zu vermeiden.
  • Die Unit uTools enthält Routinen zum Umwandeln von TPngImage oder TWICImage auf TBitmap, ohne dass Alphaformat=afDefined gesetzt wird, was TBitmap.Assign in VCL.Graphics immer tut (, und was Zeitverschwendung für .jpg ist). Ein TWICImage dekodiert .jpg, .png oder .tif sehr schnell. Leider ist TWICImage.Create nicht threadsafe, also muss man es im Haupt-Thread erzeugen.
  • Es gibt einen neuen TAlphaCombineMode amTransparentColor, welcher die transparente Farbe und die transparenten Regionen beim Skalieren erhält.
  • Die Demo ThreadsInThreads macht jetzt Vorschaubilder in 2 gleichzeitigen Threads, das sollte ein guter Crashtest dafür sein, ob's denn auch threadsafe ist.
  • Code in uScale.pas wurde etwas aufgeräumt, Interface enthält jetzt nur noch das, was Benutzer wissen müssen, und mehr Kommentare wurden hinzugefügt. Außerdem habe ich 4 fast identische Routinen in eine überführt. Das kostet ein bisschen Performance, aber ich war es einfach leid.

Kritik usw. erwünscht!

Renate
Renate
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.937 Beiträge
 
Delphi 12 Athens
 
#6

AW: VCL-Bitmap Resampler

  Alt 25. Apr 2023, 08:30
Kritik ?
Ich wüsste nicht warum

Vielen Dank dafür.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 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