direkt auf Desktop malen? (ähnlich Win-BüroklammerAssistent)

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

OK. SkinWin() ist nicht für Animationen gedacht, und es ist
speziell zum skinnen durch Bilder zur Laufzeit. Deshalb ist
es auch ziemlich langsam, da das gesamte Bild gescannt wird -
auch auf umschlossene Löcher.

Ich habe vor langer Zeit mal für Jemand eine schnellere
Methode entwickelt: SkinWinFast()
Die ist auch schon in SkinWin enthalten, nur undokumetiert. :D
Man braucht dazu einen "SkinMaker" der eine Skin-Datei von
dem Bild erstellt. Mit dem erzeugten Skin geht das skinnen
dann in Null-Komma-Nix. Auch mit sehr großen und komplizierten
Formen.

SkinWinFast() ist also für die meisten Anwendungen besser,
wenn man nicht zur Laufzeit ein Bild scannen muß, sondern
das Bild schon vorher feststeht.
Beide Befehle, SkinWin() und SkinWinFast(), haben jedoch
keine Möglichkeit den Skin wieder freizugeben, da es ja auch
nicht für Animationen gedacht war.
Durch das wiederholte aufrufen (hundertfach) bei Euch entsteht
so ein Memory-Leak, d.h. der Speicher wird aufgesaugt so schnell
es nur geht. ;)

Ich habe gestern mal einen größeren Anim-Test mit Euren
Test-Sourcen gemacht... und da hat es 1,5GB Speicher innerhalb
weniger Sekunden aufgesaugt. Der Test von bobobo ging
hier garnicht erst (das mit HideWindow).


Es muß also eine etwas andere Methode mit SkinWinFast() her,
und dafür habe ich jetzt einen Test gemacht.
Ein statisches Beispiel mit der neuen SkinWinFast-Methode,
und auch eine 30-Frames-Animation mit SkinWinFast.

DOWNLOAD: fastskin.zip (2,6MB)

Beide Testfenster kann man mit der Maus verschieben (linke Maustaste).
Über Rechtsklick bekommt man ein Menu zum beenden - sonst ALT+F4.

Der statische Test verbraucht ~1,4MB Speicher, die Fenster-
Animation braucht ~4,4MB freien Hauptspeicher - schliesslich
sind alle Einzelbilder in den Skins enthalten.

Das animieren braucht auch ein bissl Rechenpower. Auf älteren
Rechnern (z.B. 300 MHz) kann es deshalb evtl. nicht so sehr
flüssig sein. Auf 1GHz braucht es immerhin noch ~30% CPU-Power.
Habe extra mal eine größere Anim zum testen genommen.
Die Animation ist 200x600 Punkte groß und läuft mit 20 FPS,
also 1,5 Sekunden für alle 30 Frames.

Mich würde nun interessieren ob das überall läuft (Win95, WinXP),
und natürlich ob wirklich Bedarf dafür vorhanden ist - oder ob
Euch das alte SkinWin() reicht. :D

Danke schonmal fürs testen!
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

Der hund frisst das Kind auf und das Skelett läuft ..alles wie es sein soll .. nur wenn man zwischen die Beine des Skelests mit der rechten Maustaste tippt sieht man kurz die Bildüberblendungen solange des Desktops erscheint.. und weder Hund noch Skelett bleiben im Vordergrund.


möcht ja mal gerne wissen warum mein Code nicht läuft???
hier fluppt das Ding .. braucht nur ne Ecke zum Laden und macht sowas ähnliches wie Dein Code (mit Hilfe Deines Code :)) .. Fenster skinnen und ein und ausblenden.
(winXp und W2K getestet)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

bobobo hat geschrieben:.. nur wenn man zwischen die Beine des Skelests mit der rechten Maustaste tippt sieht man kurz die Bildüberblendungen solange des Desktops erscheint.. und weder Hund noch Skelett bleiben im Vordergrund.
Ich habe es ja nicht Stay-On-Top gemacht, sondern ein
ganz normales PB-Fenster mit den Styles Borderless und
ScreenCentered genommen, so wie immer.
Mir ging es hier mehr ums allgemeine Skinnen, nicht die
spezielle "Anwendung" mit dem animierten Vieh von SirCus.

Wenn Du in einen Zwischenraum klickst, dann ist es ja normal
das ein anderes Fenster dahinter nach vorne kommt.
bobobo hat geschrieben:möcht ja mal gerne wissen warum mein Code nicht läuft???
hier fluppt das Ding .. braucht nur ne Ecke zum Laden und macht sowas ähnliches wie Dein Code (mit Hilfe Deines Code :)) .. Fenster skinnen und ein und ausblenden.
(winXp und W2K getestet)
Win2k hier. Der Code läuft ja, aber es funktioniert nicht richtig.
Irgendwie hat hier ganz schnell was rumgeflimmert, durch
das HideWindow - aber ganz normal war das nicht.

Wenn der Test mit dem neuen FastSkin überall funktioniert,
dann werdet ihr das bald damit machen können. Ich glaube
das ist ein bissl besser, und vor allem schneller... :)
Habe das SkinWinFast auch nur noch nicht offiziell gemacht,
weil mir mein SkinMaker damals noch nicht gut genug fürs
Release war. Aber ich glaub das ist eh egal - zur Not mach
ich einfach ein kleines Console-Tool wie BMP2PBS oder so.

In den 2 Beispielen hab ich dann einfach die .PBS (PB Skin)
mit in die EXE eingebunden. Für Multimedia-Player, Desktop-Games
usw. also ideal zum skinnen.

Achja: Der "Hund" ist ein Wolf. ;)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

Wuff
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
SirCus
Beiträge: 182
Registriert: 10.09.2004 11:44
Wohnort: München
Kontaktdaten:

Beitrag von SirCus »

hab mich schon immer gefragt wofür das Skinwinfast sein soll.. erwähnt ist es ja. Nur merkte ich keinen Unterschied.

Naja das Skelett läuft, flimmert aber etwas..

(btw so wie das Skelett den Arsch rumschiebt, war das sicher mal ne Frau)

@Danilo kannst du nicht ein FreeSkinWin machen, welches irgendwie diese Bitmaps einfach wieder freigeben kann, damit es nich soviel speicher braucht ;)

@all ausser Skinwin, welches bisher die beste möglichkeit ist, aber für diese Zwecke misbrauht wird.. gibts da keine andre Möglichkeit? Wie macht Microsoft das denn mit dem Assistenten? oder VirtuaGirl ?
2D Game H.E.R.A. (Entwicklung eingefroren)
www.chamaeleo-fx.de.vu

- mein Lieblingszitat
"die Informationsumwelt wird von einer fürchterlichen Menge an Unsinn und Lügen verschmutzt" (Stanislaw Lem, Lokaltermin, 1954 (!) )
http://www.stanislaw-lem.de/zitate/zitate.shtml
orange-blue
Beiträge: 556
Registriert: 04.09.2004 22:23
Kontaktdaten:

Beitrag von orange-blue »

Ich denke die Werden direkt auf dem Desktop gemalt, es gibt auch so ein Befehl namnes PaintDesktop_() (in der api), weis aber nicht wei ich das in PB machen soll und dazu noch mit Transparenz. (es gibt auch den Screenoutput() befehl in der E2d Library, aber auch da hab ichdas Problem mit der Transparenz)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

@Danilo

läuft unter XP Pro SP2 fehler und Ruckelfrei. Den SkinMaker gibt's den irgendwo zum Download? In den Beispielen zu Deiner Lib ist ja so eine *.pbs Datei dabei. Wie kann ich die erstellen?

Also Lib ausbauen :allright:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten