AGB  ·  Datenschutz  ·  Impressum  







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

Farbanimation mit TCanvas

Ein Thema von DerHaushaltsProfi · begonnen am 11. Mai 2015 · letzter Beitrag vom 13. Mai 2015
Antwort Antwort
Seite 1 von 2  1 2      
DerHaushaltsProfi

Registriert seit: 18. Jan 2015
14 Beiträge
 
#1

AW: Delphi verändern

  Alt 12. Mai 2015, 16:18
So da es einige Missverständnisse gibt werde ich es nochmal genau erklären
So ich würde gerne einen Farbübergang (KEINEN Farbverlauf) von einer Farbe beginnend über andere Farben zu einer Zielfarbe. Wie es bei Verfärbungen halt üblich ist (z.B. in der Chemie). Eigentlich soll es in meinem Programm auch um Chemie Nachweise gehen. Und dafür brauche ich diese Verfärbung. Wenn ich einen Nachweis mache und die nachzuweisende Chemikalie mit einem Nachweismittel nachweise (und eine ver. bzw. entfärbung stattfindet) dann macht es ja nicht zack und aus einer blauen Lösung wird eine gelbe. Es wird erstmal hellblau dann hellgelb dann gelb. Ich hoffe, dass es nun etwas verständlicher ist . Ich habe also in meiner Canvas mittels Halbkreis und Rechteck ein reagenzglas gezeichnet und will nun immer nur den unteren Halbkreis neu einfärben. Ich hoffe das ist nun verständlich

mfg
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.152 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Delphi verändern

  Alt 12. Mai 2015, 16:46
Ändere doch bitte mal den Threadtitle...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Delphi verändern

  Alt 12. Mai 2015, 17:02
Du hast auch noch 35 Minuten Zeit dafür. (24 Stunden lang)

> Bearbeien > Erweitert


Bei Torry oder in der CodeLib gibt es Funktionen, denen man zwei Farben geben kann und die dann über einen dritten Parameter (Prozent) eine Mischfarbe rausrücken.
Ansonsten Mathematik > in RGB-Anteile zerlegen und dann jeden Anzeil berechnen und wieder zusammensetzen
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (12. Mai 2015 um 17:11 Uhr)
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
721 Beiträge
 
Delphi 12 Athens
 
#4

AW: Delphi verändern

  Alt 12. Mai 2015, 17:26
So ich würde gerne einen Farbübergang (KEINEN Farbverlauf) von einer Farbe beginnend über andere Farben zu einer Zielfarbe.

Dann mach das doch mit einem Timer:

geeignetes Timerintervall festlegen (vielleicht 10, musst du halt ausprobieren).

Im Timerevent setzt du die Farbe auf den nächsten Farbwert und malst du den Halbkreis komplett neu, solange bis die Zielfarbe erreicht ist. Du brauchst nur noch den Algorithmus für die Berechnung des nächsten Farbwertes. Vielleicht wirst du da bei den hier schon geposteten Codeschnipsel für Gradienten fündig.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.655 Beiträge
 
Delphi 12 Athens
 
#5

AW: Delphi verändern

  Alt 12. Mai 2015, 18:41
In dem auf Seite 1 verlinkten Thread hatte ich eine Beispielanwendung gepostet (damals noch Delphi 7). Ist das ungefähr das, was dabei herauskommen soll?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.545 Beiträge
 
Delphi 12 Athens
 
#6

AW: Delphi verändern

  Alt 12. Mai 2015, 19:10
Du hast nicht dabei geschrieben, welche Delphi-Version Du verwendest. Wenn Du eine neuere Delphi-Version nutzt, kannst Du das auch mit FireMonkey lösen, für solche Sachen ist es nahezu ideal.

Ich habe anliegend mal ein Beispiel angefügt (erstellt in XE7), das ich hier in 5 Minuten zusammengeklickt habe. Mittels eine Farbanimation wechselt die "Flüssigkeit" (welche aus einer Kombination aus Rectangles und Elipsen besteht) von der Farbe Blau nach Gelb (in dem rechten Kolben).

Die Dauer des Übergangs kann man unter "Duration" einstellen (hier habe ich mal 2 Sekunden gewählt). Auch kann man festlegen, ob der Farbübergang Linear erfolgen soll oder z.B. exponential (unter "Interpolation").

Sollen hier noch andere Farbstufen dazwischen erscheinen, kann man statt der ColorAnimation eine GradientAnimation verwenden, wo man sich die Zwischenfarben einfach in dem Gradient-Dialog zusammen klicken kann.
Angehängte Grafiken
Dateityp: jpg Kolebenstart.jpg (23,2 KB, 12x aufgerufen)
Dateityp: jpg Kolebenstop.jpg (23,4 KB, 5x aufgerufen)
Angehängte Dateien
Dateityp: zip Animate.zip (6,7 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat
DerHaushaltsProfi

Registriert seit: 18. Jan 2015
14 Beiträge
 
#7

AW: Delphi verändern

  Alt 12. Mai 2015, 19:51
@Harry Stahl gaaaaanz so komplex muss es nun auch nicht sein ;D

also ich kann hier mal ein Bsp ran hängen wie ich mir das ungefähr vorgestellt habe. Nur bei mir ist es halt noch nicht ganz "ausgereift" das kann man bestimmt noch kürzen oder optimieren.

@Popov Ihr Quelltext ist (da ich noch Delphi Anfänger bin ) echt kompliziert... Ich blicke da leider nicht ganz durch :/. Ich habe aber jetzt einige Tage frei und werde mal eine kleine Recherche betreiben und gucken ob mir Ihr Quelltext weiterhilft.

Trotzdem schon jetzt mal ein großes Danke an alle Helfer

mfg
Angehängte Grafiken
Dateityp: png TestBild.PNG (14,4 KB, 24x aufgerufen)

Geändert von DerHaushaltsProfi (12. Mai 2015 um 20:09 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#8

AW: Delphi verändern

  Alt 12. Mai 2015, 21:11
@Popov Ihr Quelltext ist (da ich noch Delphi Anfänger bin ) echt kompliziert...
Deswegen habe ich dir auch eine fertige ColorMix Funktion gepostet.

Das "Problem" mit der TColor Farbe ist nicht, dass die Farbe Rot den Wert 255 hat und die Farbe Blau den Wert 16711680 und man mit einer For-Schleife einfach nur den Wert von dem einen zum anderen erhöhen muss, um einen Wechsel von rot zu blau zu bekommen. Das klappt nicht. Bei der Farbe TColor, die aus 4 Bytes besteht, wobei was 1 Byte eine spezielle Bedeutung hat, stehen die anderen drei Bytes für die drei RGB-Farben rot, grün und blau. Ein Byte für rot, ein für Grün, usw. Ein Byte kann zwischen 0 und 255 256 Zustände annehmen. Somit ist 0 0% rot und 255 100% rot. Dazwischen gibt es 256 Abstufungen. Kombiniert man alle drei Farben mit 256 Abstufungen, ergibt das 256 * 256 * 256 = 16.777.216 mögliche Farben.

Um nun von einer Farbe zu anderen Zwischenschritte zu berechnen, muss man die TColor Farbe zuerst in die einzelnen RGB Farben zerlegen, die Zwischenschritte für jede einzelne Farbe berechnen, und dann alle drei wieder zu einer Zahl zusammenfügen. Der TColor Zahl.

Und das passiert in der ColorMix Funktion.
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
721 Beiträge
 
Delphi 12 Athens
 
#9

AW: Delphi verändern

  Alt 12. Mai 2015, 21:19
In deinen Repeat until-Schleifen tut sich ja gar nichts.

statt
Delphi-Quellcode:
repeat
  a:=a+1;
until a>123;
kannst du auch gleich schreiben a:=124 ; mehr macht diese Schleife nicht. Du muss innterhalb jeder dieser Repeat-Schleifen nochmal
Delphi-Quellcode:
    Paintbox1.Canvas.Brush.Color:=rgb(a, b, c);
    Paintbox1.Canvas.Pie(60, 160, 100, 200, 60, 180, 100, 180);
    sleep(10);
machen und die äußere Repeat-Schleife weglassen. Dann werden die RGB-Werte getrennt voneinander nacheinander aminiert geändert. Ist das so gewollt? Andernfalls muss du den Beitrag von Popov berücksichtigen.

Ein Timer wäre eleganter, aber so geht's auch. Denk aber dran, dass das Reagenzglas nochmal mit der aktuellen Farbe im OnPaint das Paintbox gemalt werden muss, sonst ist es weg, wenn dein Fenster mal verkleiner und wiederhergestellt wird.

Noch ein par Tips:

- Quelltext ist Text, wie der Name schon sagt, also postet man den auch als Text und nicht als Screenshot.

- Wenn du schon Integer-Variablen für RGB-Werte hast, warum heißen die a,b,c und nicht r,g,b?

- Lass das With weg. Später schreibst du ja Paintbox1.Canvas.Brush.Color sowieso aus, dann kannst du dir das with doch sparen. Ohne with weiß man immer genau, was gemeint ist.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.545 Beiträge
 
Delphi 12 Athens
 
#10

AW: Delphi verändern

  Alt 12. Mai 2015, 21:22
@Harry Stahl gaaaaanz so komplex muss es nun auch nicht sein ;D
Ich weiß nicht, ob Du mal in den Source reingesehen hast, insofern nur noch der Hinweis, dass der von mir erstellte Source-Code aus ganzen 4 Zeilen besteht:

Delphi-Quellcode:
procedure TForm11.Button1Click(Sender: TObject);
begin
  ColorAnimation1.Enabled := false;
  ColorAnimation1.Enabled := true;
end;

procedure TForm11.ColorAnimation1Process(Sender: TObject);
begin
  Ellipse1.Fill.Color := Rectangle2.Fill.Color;
  Ellipse4.Fill.Color := Rectangle2.Fill.Color;
end;
Das würde ich nicht unbedingt als komplex berzeichnen. Aber man kann das natürlich auch auf die "harte Tour" machen, zum Lernen ist das sicher nicht verkehrt.

Zu Deiner Vorstellung für die VCL-Lösung: Du solltest das Zeichnen der Grafik im OnPaint-Event der Paintbox vornehmen. Denn was Du derzeit malst, ist nur "flüchtig" (minimiere mal nach dem Klick auf den Button das Formular, Deine Zeichnung ist dann verschwunden).

Besser wäre es hier Variabeln anzulegen, diese in gewissen Zeitabständen zu aktualisieren und dann jeweils auch die Paintbox aktualisieren zu lassen.

Und zu TColor hat Dir Popov gerade die entscheidenden Hinweise gegeben.

Geändert von Harry Stahl (12. Mai 2015 um 22:25 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:39 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 by Thomas Breitkreuz