Bilder überblenden in einem Programm

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
hiltwin
Beiträge: 311
Registriert: 06.10.2005 11:08
Wohnort: D-31177 Harsum
Kontaktdaten:

Bilder überblenden in einem Programm

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

auf was für einer programmoberfläche?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
hiltwin
Beiträge: 311
Registriert: 06.10.2005 11:08
Wohnort: D-31177 Harsum
Kontaktdaten:

;o)

Beitrag 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?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
hiltwin
Beiträge: 311
Registriert: 06.10.2005 11:08
Wohnort: D-31177 Harsum
Kontaktdaten:

...

Beitrag 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)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
hiltwin
Beiträge: 311
Registriert: 06.10.2005 11:08
Wohnort: D-31177 Harsum
Kontaktdaten:

...

Beitrag von hiltwin »

... danke - werd mal reinschauen und sehen, was ich erreiche!
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag 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
hiltwin
Beiträge: 311
Registriert: 06.10.2005 11:08
Wohnort: D-31177 Harsum
Kontaktdaten:

hey ...

Beitrag 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?
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten