Image verschieben ohne flackern
-
Hi,
Ich bekomme von einer Hardware einen Analogwert den ich so umwandel das ich Pixelpositionen bekomme. Also je nach dem welche Spannung ich habe, wird das Bild verschoben. Das Problem was ich jetzt habe, ist das das Image immer flackert sobalt eine neue Position gesetzt wird.
Hat jemand ne Idee wie ich das weg bekomme, oder ob es andere Möglichkeiten gibt ein Bild zu verschieben ohne das es flackert??
Ach ja, das Image ist auf transparent gesetzt.
Bin für jede Hilfe dankbar
-
Bin nicht der Guru, eventuell sollte es mit ScrollBy() gehen...
-
DoubleBuffered?
-
Danke schonmal,
aber das hat mir bis jetzt nicht wirklich weiter geholfen. Gibts nicht noch andere möglichkeiten?oder wie soll das mit doublebuffer funktionieren?
-
Hallo
Zu wenig Informtionen. Benutzt du TImage/TPaintbox? Zeichnest du direkt in ein Canvas? Soll das Bitmap an einer Stelle verschwinden und an einer anderen wieder erscheinen oder soll die Bewegung zur neuen Stelle visualisiert werden? Auch minimaler Quellcode wäre hilfreich.
Flackern kommt bei Canvas-Operationen vor allem wenn das ganze Bild ständig mit einer Hintergrundfarbe überzeichnet wird und dann das komplette Bild wieder neu gezeichnet wird. Das muß soweit optimiert werden das der gleichbleibende Hintergrund nicht jedesmal neu gezeichnet werden muß (z.B. in einem separatem TBitmap zwischenspeichern) und die alte Position des sich bewegenden Sprites mit dem entsprechenden Bereich aus dem Hintergrund überzeichnet wird und dann an die neue Position neu gezeichnet wird.
DoubleDuffered ist eine Eigenschaft von mehreren Komponenten, siehe BCB-Hilfe.
bis bald
akari
-
Das ist ein TImage, was ich zur zeit benutze und hab dem ein Bild (bmp) zugewiesen.
Das Bild soll nachher eine flüssige bewegung darstellen.
die bewegung mach ich einfach indem ich den analogwert so umreche das er mir nen offset auf Image1->Left gibt.
-
hat keiner mehr ne idee??
das muss doch irgendwie gehen!?!?
-
Setz in die Form ein Panel (alClient)
Setz das Image in das Panel
Setze
Panel1->DoubleBuffered=true;
das sollte helfen.Du kannst auch
Form1->DoubleBuffered=true;
setzen, das hilft aber manchmal nicht.
-
Danke,
jetzt flackert es zwar deutlich weniger (fast gar nicht mehr) aber es wird auch kein bild bei der bewegung mehr angezeigt. sobald sich das image bewegt, wird da ein einfarbiges rechteck draus.
-
Schau mal unter "Eigenschaften von Anzeige" (rechtsklick Desktop, Eigenschaften) -> Darstellung -> Effekte -> Haken bei "Fensterinhalt beim ziehen anzeigen. Vielleicht ist das kein Haken gesetzt....
-
fragemännchen schrieb:
jetzt flackert es zwar deutlich weniger (fast gar nicht mehr) aber es wird auch kein bild bei der bewegung mehr angezeigt.
Dann wirst du wohl nicht umhinkommen, uns mal zu zeigen, wie du das Verschieben konkret programmiert hast.
-
Hallo,
ich weiß, der Beitrag ist schon ein paar Jahre alt, aber ich denke, dass passt hier rein:
Ich habe das gleiche Problem mit dem Flackern, wenn ich ein Image einfach kontinuierlich verschieben/bewegen will, indem ich die Position über den Left-Wert ändere.
Die angesprochene DoubleBuffer Funktion kann ich im Borland C++-Builder 1 (den ich benutze) nicht finden.Gibt es noch eine andere Möglichkeit das Flackern zu beseitigen bzw. das Image zu bewegen?
Wäre schön, wenn mir dabei jemand helfen könnte.
-
drummi schrieb:
Hallo,
ich weiß, der Beitrag ist schon ein paar Jahre alt, aber ich denke, dass passt hier rein:
Ich habe das gleiche Problem mit dem Flackern, wenn ich ein Image einfach kontinuierlich verschieben/bewegen will, indem ich die Position über den Left-Wert ändere.
Die angesprochene DoubleBuffer Funktion kann ich im Borland C++-Builder 1 (den ich benutze) nicht finden.Gibt es noch eine andere Möglichkeit das Flackern zu beseitigen bzw. das Image zu bewegen?
Wäre schön, wenn mir dabei jemand helfen könnte.Borland Builder 1? Ernsthaft? Der ist von 1997, hat also schon gut 17 Jahre auf dem Buckel.
Erster Tipp:
Deinstallieren und eine aktuellere Version benutzen
-
drummi schrieb:
...Die angesprochene DoubleBuffer Funktion kann ich im Borland C++-Builder 1 (den ich benutze) nicht finden. ...
Das ist auch keine Funktion!
Das ist eine Eigenschaft!
Die kann nur per Code gesetzt werden, nicht im OIGruss
Frank