Image-Layer-Konzept
-
Hallo,
in einer Anwendung halte ich in einem DynamicArray bis zu 250 Images, die ich zur Laufzeit auf auf eine ScrollBox setze. Die Images zeigen die Sänger eines Chores. Abhängig vom Status eines Sängers soll jedes Image mehrfach markierbar sein.
z.B.
- bei Zustand A rotes Quadrat oben links
- bei Zustand B grünes Quadrat oben rechts
- ...
- bei Zustand Z halbtransparentIch suche einen Ansatz, der performant genug ist, um während der Laufzeit auch umfangreiche Statusänderungen verarbeiten zu können.
Gruß
Leo
-
Hallo
Ich weiß ja nicht wie groß diese Zustandsbilder sein sollen, aber das Zusammensetzten von mehreren icongroßen Bildern mittels TCanvas::Draw sollte keine merkbare Zeit brauchen.
Wichtig ist meiner Meinung nach nur, das du nicht für jeden einzelnen Zeichenvorgang jedes Zustandsbild jedes Sängers neu zusammensetzt. Am besten also zusätzlich zu den einzelnen Rohbildern das aktuelle Bild auch zwischenspeichern. Dazu reicht es ja, wenn du je ein TImage verwendest, das ja die Bitmap-Daten von sich aus auch zwischenspeichert.bis bald
akari
-
akari schrieb:
Hallo
Ich weiß ja nicht wie groß diese Zustandsbilder sein sollen,Die Bilder sind bis zu 20 KB groß.
aber das Zusammensetzten von mehreren icongroßen Bildern mittels TCanvas::Draw sollte keine merkbare Zeit brauchen.
Wichtig ist meiner Meinung nach nur, das du nicht für jeden einzelnen Zeichenvorgang jedes Zustandsbild jedes Sängers neu zusammensetzt. Am besten also zusätzlich zu den einzelnen Rohbildern das aktuelle Bild auch zwischenspeichern. Dazu reicht es ja, wenn du je ein TImage verwendest, das ja die Bitmap-Daten von sich aus auch zwischenspeichert.
Kannst Du das mit dem Zusammensetzen genauer erklären?! Was sollte wozu zusammengesetzt werden?
Gruß Leo
-
Hallo
Du kopierst nacheinander einzelne Bitmaps in ein einzelnes Zielbitmap mittels TCanvas::Draw hinein. Wenn die Eigenschaften TBitmap::TransparentColor entsprechend gesetzt ist, wird dann nicht der gesamte Bildbereich neu überzeichnet, sondern nur die nicht-transparenten Bereiche der Einzelbilder zusammengesetzt.
bis bald
akari
-
Hallo Akari,
ich habe Dich noch nicht ganz verstanden.
Nehmen wir doch ein einfaches Beispiel. Gegeben sei ein Ausgangsbild Quelle von der Größe 3 x 3, also 9 gleich große Flächen mit der Farbe türkis (RGB: 0, 255, 255).
Das Zielbild Ziel hat die gleiche Größe wie Quelle, ist jedoch lila (RGB: 255, 0, 255) und soll um die folgenden Markierungen ergänzt werden:
Die Fläche links oben soll gelb, links mitte grün, links unten blau.Kannst Du mir anhand dieses Beispiels zeigen, wann z.B. die Eigenschaft TransparentColor wie gesetzt sein muss?!
Besten Dank
Leo
-
Hallo
Das Mischen der Farben gehht mit TransparentColor so nicht. Mit TransparentColor kannst du nur Ja/Nein-Auswahl zwischen zwei Farben durchführen. Um bei deinem Beispiel zu bleiben : Auf dein türkises 3x3 Bitmap soll die obere Reihe in lila umgewandelt werden. Also erstellst du ein weiteres 3x3 Bitmap, die oberen Pixel in lila. Alle weiteren Pixel werden auf TransparentColor gesetzt. Nun kannst du das zweite Bitmap mit DrawBitmap in das erste kopieren und erhälst ein Bitmap, obere Reihe lila, rest türkis. (Mit einer einfachen Reihe ist das Beispiel natürlich nicht sinnvoll. Aber stell dir komplexere Figuren als eine Reihe vor).
Deine Farbzusammensetzung kann ich nicht in ein System umwandeln, deshalb kann ich dir auch kein konkretes Vorgehen empfehlen. Vermutlich must du eben manuell auf TCanvas::Pixel zugreifen und deine Ergebnisfarbe pro Pixel aus den zwei Ausgangsfarben bestimmen.
bis bald
akari