Seite 1 von 1

Bilder überblenden in einem Programm

Verfasst: 20.03.2006 12:15
von hiltwin
Hallo,

ich wollte auf einer Programmoberfläche ein Bild ablegen und dann überblendet durch ein anderes ersetzen lassen.

Hat jemand ne Idee, wie das am einfachsten geht?

Frdl. Gruss
Hiltwin

Verfasst: 20.03.2006 13:20
von Kaeru Gaman
auf was für einer programmoberfläche?

;o)

Verfasst: 20.03.2006 14:09
von hiltwin
tja, hab wohl zu lange nicht pb offen gehabt ;o)

also, ich wollte die bilder mit ImageGadget auf ein fenster bekommen.

lässt sich da was überblenden, oder muss ich mit 2Ddrawing arbeiten?

Verfasst: 20.03.2006 14:19
von Kaeru Gaman
sorry, für sprites hätt ich ne lösung gewußt...

aber images sind nicht mein ding...

und ne routine für 2D-Drawing ist zwar machbar, aber dürfte saulahm sein...

...

Verfasst: 20.03.2006 14:35
von hiltwin
Kaeru Gaman hat geschrieben:sorry, für sprites hätt ich ne lösung gewußt...

aber images sind nicht mein ding...

und ne routine für 2D-Drawing ist zwar machbar, aber dürfte saulahm sein...
sprites? hab ich noch nie mit gearbeitet ;o(
(gabs früher auf meinem schneider cpc 6128 nicht *gg*)

Ist das viel Arbeit, oder kannst Du was lauffähiges mit Copy+Paste hier zum Testen reinsetzen? (Arbeite noch mit 3.93)

Verfasst: 20.03.2006 19:00
von Kaeru Gaman
das ist ne komplett andere schiene, lies dir für den hintergrund mal den entsprechenden abschnitt in der Help rein...

die Vorgehensweise wäre folgende:

du erzeugst auf deinem fenster in der gewünschten größe die sonst das image hätte einen DX-Screen.
[ OpenWindowedScreen(...) ]

auf diesem screen kannst du nun das eine bild als hintergrund darstellen
[ DisplaySprite(...) ]

darüber legst du das zweite Bild mit eine gewissen transparenz.
[ DisplayTranslucidSprite(...) ]


Dieses Verfahren hat aber einen ganz dicken Haken:
es kann nur ein einziger DXScreen zur Zeit aktiv sein.
also kannst nicht nur du in deinem prog so etwas nur einmal machen,
andere programme wie manche TV-Fensterchen, beißen sich auch damit.

Über Überblendungen bei Sprites wurde schon öfters in diesem Forum geschrieben,
du solltest mit suche nach "DisplayTranslucidSprite" und/oder "Überblendung" einiges finden...

...

Verfasst: 20.03.2006 21:00
von hiltwin
... danke - werd mal reinschauen und sehen, was ich erreiche!

Verfasst: 21.03.2006 12:20
von Sven
Oder Du machst es auf die Billig-Variante wie Kleinweich-Kraftpunkt und blendest immer Streifen- oder Mosaikweise um. Also ein Zielbild, ein Quellbild, in einer Schleife bestimmte Bereiche des Quellbildes ins Zielbild kopieren und dieses mit SetGadgetState auf einem ImageGadget aktualisieren...

Damit zeichnest Du nicht jedesmal das ganze Bild.

Sven

hey ...

Verfasst: 21.03.2006 23:38
von hiltwin
.... die idee ist ja gar nicht so übel nicht!

hast du vielleicht etwas an codeschnipsel, damit der anfang nicht so schwer fällt?

Verfasst: 21.03.2006 23:58
von AND51
Ich hätte eine Lösung, die auf Win-API zurückgreift:
Du erstellst ein ImageGadget() und lädst das erste Bild hinein.
Dann benutzt du den befehl

Code: Alles auswählen

AnimateWindow_(GadgetID(#ImageGadget), ms, $80000|$10000)
und WOSCH! verschwindet es.
Danach lädst du sofort das zweite Bild in das ImageGadget() und benutzt den Befehl

Code: Alles auswählen

AnimateWindow_(GadgetID(#ImageGadget), ms, $80000)
und PLING! erscheint es.
Eventuell muss das Fenster danach erneut gezeichnet werden mit

Code: Alles auswählen

UpdateWIndow_(WindowID())
Nachteil: Erst verschwindet das Bild, bevor das nächste erscheint.
Um das Verschwinden des ersten und das Erscheinen des zweiten Bildes zu realisieren muss hier mit 2 ImageGadget()'s und 2 Threads gerabeitet werden.

Achja: ms sind die Anzahl der Millisekunden, die der Effekt andauern soll.

Gefällt dir die Idee?