AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tparallel und Bitmap-Bearbeitung

Ein Thema von Harry Stahl · begonnen am 18. Nov 2014 · letzter Beitrag vom 20. Nov 2014
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.379 Beiträge
 
Delphi 12 Athens
 
#1

AW: Tparallel und Bitmap-Bearbeitung

  Alt 19. Nov 2014, 02:24
OK, dann sind es eben massig anonyme Methoden (1), welche in einem Pool warten und von einer Hand voll Threads abgearbeitet werden.

1:
* kurzer Code von nichtmal annähern einer Millisekunde Rechenzeit
* der jeweils nur ein einziges Pixel verarbeitet

Die Verwaltung und Synchronisierung dieses Pools ist garantiert langsamer, als die eingesparte Zeit.
Über die Verarbeitung einer ganzen oder mehrere Zeilen, würde jede Methode länger rechnen und der Tool müsste gleichzeitig weniger verwalten.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#2

AW: Tparallel und Bitmap-Bearbeitung

  Alt 19. Nov 2014, 03:54
Ich würde die Bearbeitung für jede ScanLine in einen separaten Thread verschieben, also vielleicht so:
Delphi-Quellcode:
TParallel.For(0, Bitmap.Height-1, procedure (Y: Integer)
var
  Ziel : ^TRGBTriple;
  Quelle : ^TRGBTriple;
  OK: Boolean;

begin
  Ziel := Bitmap.Scanline[y];
  Quelle := Original.Scanline[y];
,,,
Grund:
1. Größere Abschnitte (vielleicht kann man die noch größer machen, jeder Thread X Scanlines auf einmal)
2. Keiner tritt dem anderen auf die Füße.

Die Vergleiche mit Eiern und Kuchen sind zwar boxkomisch, aber hier ist der Denkfehler ja der, das die Variablen unkontrolliert verwendet werden, und das sehe ich bei dem Eierkochenkuchenbackenvergleich nicht.

Diese TParallel-Library ist kein Hexenwerk und zaubern kann sie auch nicht. Das ist ein ziemlich banaler, aber sehr elegant zu verwendender Threadpool. Alles, was man über Threads weiß, muss man auch hier beherzigen. Wenn man die einzelnen Jobs nicht allzu granular aufteilt (1 Pixel ist SEHR granular) und den Scope/Zugriff der gemeinsam verwendeten Variablen beachtet (Füße, blaue Flecken und so), muss man sich wohl über die Anzahl der CPU-Kerne keine Gedanken mehr machen. Aber über den ganzen Rest schon.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.379 Beiträge
 
Delphi 12 Athens
 
#3

AW: Tparallel und Bitmap-Bearbeitung

  Alt 19. Nov 2014, 09:14
Ja, Ziel/Quelle in jeden Thread verschieben und zugleich hoffen, daß Scanline threadsafe ist.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: Tparallel und Bitmap-Bearbeitung

  Alt 19. Nov 2014, 10:56
Ja, Ziel/Quelle in jeden Thread verschieben und zugleich hoffen, daß Scanline threadsafe ist.
=> Ansonsten vorher in ein Array packen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.379 Beiträge
 
Delphi 12 Athens
 
#5

AW: Tparallel und Bitmap-Bearbeitung

  Alt 19. Nov 2014, 11:32
Man kann es auch Mathematisch erledigen ... wenn man weiß wie die Daten im Bitmap gespeichert werden.

Das Windows-Bitmap wird von unten nach oben gespeichert.
* Scanline auf die letzte Zeile
* und dann liegen die Linies hinterienander
* zwischenden Lines muß man nur noch das Align beachten, also jeweils auf 4 Byte aufrunden, aber bei 32-Bit-Bitmaps fällt das nicht auf

Delphi-Quellcode:
P: TPixelAarray; // array[0..z] of TRGB;
P := Scanline[Bitmap.Height - 1];
Pixel := P[(Bitmap.Height - y - 1) * Image.Width + x];
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (19. Nov 2014 um 11:34 Uhr)
  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 13:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz