ProSpeed.dll
Wenn sie Fragen und Anregungen zu meiner ProSpeed DLL oder zu den Profan²-Sourcecodes und Demos haben, dann sind sie hier richtig. Auch neue Vorschläge sind jederzeit willkommen. Und bitte mit richtigem Namen und Email-Adresse einschreiben. Danke.

| Suchen
| Zurück zur Übersicht

Autor | Thema: Komische Effekte
Rolf Koch
| Datum:25.05.02 21:23 (webmaster@rokosoft.de) |
Hi da bin ich wieder. 2 Fragen hab ich mitgebracht 1.) In meinem Programm habe ich folgende Zeilen: (Normales Windowsfenster) f1&=CreateExtBmp(%HDC,%maxx,%maxy) f2&=CreateExtBmp(%HDC,%maxx,%maxy) string bereich#,0="SPRITE.BMP" spriteplan&=LoadExtImage(bereich#) sprites&=InitSprite(spriteplan&,%HDC,f1&,f2&,0,0,40,40,spriteindex%,1,10,40,40,1,1) bei InitSprite verabschiedet sich das Programm ohne Worte. Warum? Was ist nun los? 2.) Was sind das für Effekte (Sprite wird doppelt und schwarz angezeigt, obwohl Transparenz weis)
    declare prospeed&,f1&,f2&,bereich#,spriteplan&,sprites&
    dim bereich#,100000
    $I C:\PROFAN\AKTUELLE PROJEKTE\LOS\INC\Prospeed_Funktionen.inc
    prospeed&=usedll("C:\PROFAN\AKTUELLE PROJEKTE\LOS\Prospeed.dll")
    window 10,10- 300,300
    windowtitle "Test"
                    f1&=CreateExtBmp(%HDC,300,300)
                    f2&=CreateExtBmp(%HDC,300,300)
                    string bereich#,0="C:\SPRITE.BMP"
                    spriteplan&=LoadExtImage(bereich#)
                    sprites&=InitSprite(spriteplan&,%HDC,f1&,f2&,0,0,40,40,4,1,10,10,10,1,1)

    while 1
    waitinput
    wend

    dispose bereich#
    freedll prospeed&
    FreeExtBmp(f1&)
    FreeExtBmp(f2&)
    FreeExtBmp(spriteplan&)
    FreeExtBmp(sprites&)
Danke im Vorraus Rolf
Rolf Koch
| Datum:25.05.02 21:41 (webmaster@rokosoft.de) |
Ohh naja zur Frage 2 habe ich die Lösung, habe das CopyExtBmp(f1&,0,0,%maxx,%maxy,%HDC,0,0,0) CopyExtBmp(f2&,0,0,%maxx,%maxy,%HDC,0,0,0) vergessen. Jedoch Frage 1? Initsprite lässt das Programm aussteigen. Also nicht das hier gepostete Testprogramm. hmm? Rolf
Rolf Koch
| Datum:25.05.02 22:30 (webmaster@rokosoft.de) |
Hier mal ein Beispiel zum Testen:
    $P+
    SetErrorLevel 0
    Declare bereich#
    Declare sprites&
    Declare f1&,f2&,pfad$
    Declare prospeed&,prospeed$,spriteplan&
    DIM bereich#,10000

    'PFADROUTINEN *******************************
    pfad$=getdir$("@")
    chdir pfad$
    Prospeed$=pfad$;"\Prospeed.dll"

    $I C:\PROFAN\AKTUELLE PROJEKTE\Speedanim\Prospeed_Funktionen.inc
    ' *M Init- und Exit-Prozeduren:

    SetTrueColor 1
    WindowStyle $003F
    WindowTitle "Test"
    Window 147,40 - 450,479

                    f1&=CreateExtBmp(%HDC,300,40)
                    f2&=CreateExtBmp(%HDC,300,40)
                    string bereich#,0="C:\SPRITE.BMP"
                    spriteplan&=LoadExtImage(bereich#)
                    sprites&=InitSprite(spriteplan&,%HDC,f1&,f2&,0,0,40,40,4,1,15,100,10,1,1)
                    CopyExtBmp(f1&,0,0,%maxx,%maxy,%HDC,0,0,0)
                    CopyExtBmp(f2&,0,0,%maxx,%maxy,%HDC,0,0,0)

    WhileNot appexit%
    WaitInput

    Wend
    freedll prospeed&
    freedll hdll%
    Dispose Bereich#
Wenn man Initsprite auskommentiert klappt es - sonst Programmende ???? WARUM ??? Rolf
Rolf Koch
| Datum:26.05.02 00:11 (webmaster@rokosoft.de) |
Nagut dann antworte ich mir mal selbst: Mensch bin ich blöd ! Hab das allerwichtigste verschluckt: Usedll Sorry das tut ja schon weh Bis dann Rolf
Moritz Kersten
| Datum:26.05.02 12:55 (IsNoMK@gmx.de) |
Hallo Rolf, Falls du dich wunderst das Frank nicht antwortet, er ist dieses Wochenende nicht zuhause (Campen bei dem Wetter ). Das Wunder mit dem vergessenen @usedll... hatte ich auch schonmal, sehr lustig das die meisten Befehle funktionieren (zwar langsam) obwohl die Dll noch nicht mal im Speicher ist ! Noch ein kleiner Tip falls du Profan 7 und aufwärts hast... string bereich#,0="SPRITE.BMP" spriteplan&=LoadExtImage(bereich#) ...kannst du durch... bild$="SPRITE.BMP" spriteplan&=LoadExtImage(@addr(bild$)) ...ersetzen, hat den Vorteil das du keinen Bereich dimensionieren musst. Moritz
Rolf Koch
| Datum:26.05.02 13:14 (webmaster@rokosoft.de) |
Ahh Danke Moritz Naja hat Frank auchmal verdient - obwohl hier in Koblenz das Wetter mehr schlecht ist. Ja, das mit > 7.0 ist mir bekannt, aber solche Sachen mach ich am Schluss. Frank ist bekannt, das ich ein Tool schreibe für die Pspeed - und zwar den Speedanimator. Läuft soweit ganz gut. Schönes Restwochenende noch Rolf
Moritz Kersten
| Datum:26.05.02 16:46 (IsNoMK@gmx.de) |
Hört sich sehr interessant an Rolf ! Was macht der Speedanimator den genau, oder wird das noch nicht verraten ? Wo wir schonmal beim Thema sind, Pathfinder 1.5 ist auch so gut wie fertig, nachdem ich mich fast 2 Wochen hab in den Wahnsinn treiben lassen wegen einem extrem schwierigen Fehler ! Hier mal ne kleine Übersicht der neuen Features: -Höhere Geschwindigkeit und div. Fehler behoben -Neues Bildersystem zum nachträglichen Ändern der Ebene und Position der Bilder -Bilderpfade werden im Projekt mitspeichert -Pfad Punkte können umbenannt werden (wird auch mitgespeichert) -RGB-Verknüpfungssystem -riesiges Optionsmenü -Pfad-Arranger (mehrere Pfade in einer Datei zusammenfügen) -unendliche Undo/Redo Funktion -Icon-Leiste -Breseham und Bitmap Export -Laden von Jpg,Gif und Wmf (Dank Frank) -Erstellen von Null-Projekten (erstellen von Positionsunabhängigen Pfaden) -div. andere kleine Änderungen und Neuerungen... Kommt bald, schätze 1-2 Wochen noch Moritz
Rolf Koch
| Datum:26.05.02 16:58 (webmaster@rokosoft.de) |
Tja Moritz, der Speedanimator ist einfach ein Programm, indem man: - Einzelne Frames malen kann - diese in ein Sprite hinzufügen kann - dazu eine Vorschau abspielen kann - bearbeiten der einzelnen Frames u.s.w ...... Im Moment bin ich am verzweifeln, da ich das erstellen auf Setpixelebene mache und alles was auf dem großen Malbild erstellt wird in Pixel in das 40x40 Format per Setpixel kopiert wird. Soweit sogut. Laden kann ich aber leider auf diese Art nicht, da ich das mit dem Setpixel aufgrund der Fehlerhaften Sizedfunktion gemacht habe. Copysized verzehrt das Bild leider. Frank hatte mal was von einer anderen Funktion in der Win32 erzählt, finde diese aber leider nicht. - Achso, bin auf Deine neue Version höchst gespannt !!! Vielleicht wäre auch ein Scrollbereich des geladenen Bildes in Deinem Programm drin, da ich mal ein Bild größer als das Arbeitsfeld hatte und nicht alle Pfade unterbekommen habe Nur als Vorschlag. Rolf
Rolf Koch
| Datum:26.05.02 18:52 (webmaster@roksoft.de) |
Hier mal ein Screenshot
Moritz Kersten
| Datum:26.05.02 20:09 (IsNoMK@gmx.de) |
Wird wohl sehr praktisch werden dein Programm ! Hab auch schon paar. ähnliche Programme um Animated-Icons zu entwickeln, wird dein Tool so ähnlich oder noch ein paar spezielle Funktionen bieten ? (bestimmt ) Zu dein Problem fällt mir auch nur StretchBlt() ein, aber das macht ja schon CopySizedBmp. So ganz hab ich das auch nicht verstanden, du setzt in einer Speicherbitmap die 40x40 Pixel und kopierst sie dann per MCopySizedBmp (oder CopySizedBmp()) in dein Arbeitsfenster auf %hdc in der entsprechenden Größe, oder ? Ist die Größe des zu entwerfenden Sprites auf 40x40 Pixel festgesetzt ? "Vielleicht wäre auch ein Scrollbereich des geladenen Bildes in Deinem Programm drin, da ich mal ein Bild größer als das Arbeitsfeld hatte und nicht alle Pfade unterbekommen habe." War das Bild größer als 2000x2000 Pixel ? Ansonsten kann man jetzt mit dem neuen Bild System die Bilder komplett verwalten: -Hinzufügen, entfernen... -Ändern der Position -Ändern der Ebene Und das natürlich so oft und wann man will auch nachdem speichern und wieder öffnen, vielleicht nicht ganz so praktisch wie eine Scrollfunktion aber im Endeffekt das gleiche Moritz
Rolf Koch
| Datum:26.05.02 20:20 (webmaster@rokosoft.de) |
Ja richtig: Das große Arbeitsfenster wird wärend des Zeichnens auf 40x40 verkleinert. Aber bei mir nehme ich bewusst: Setpixel Hab vorher Copysizedbmp oder die Funktion von Frank (ist ja eigentlich ident.) genutzt. Dort ist das Problem: Im großen Arbeitsfenster ist jeder Bildpunkt gleich. Das im kleinen (ist bei mir OnTheFly) wird wenn ich Copysized nehme verzerrt. Aber irgendwie will ich bald Datei laden und muss dann aus dem kleinen Bild eine Kopie auf das große Arbeitsfenster bringen - und das wird auch verzerrt - kennste bestimmt. Naja - mal schauen. Rock'n'Rolf
Frank Abbing
| Datum:26.05.02 20:37 |
Hallo zurück !!! Das Wetter war gar nicht so übel, bis auf 2 kleine Regenschauer. Sind fast die ganze Zeit Motorboot gefahren ;-)) Dein Problem hat sich ja erledigt, Rolf, Gott sei Dank... Gruß, ein müder Frank.
Rolf Koch
| Datum:28.05.02 18:35 (webmaster@rokosoft.de) |
Hi Frank Naja erledigt hat sich das alte Problem. Jedoch wie beschrieben, will ich nun wenn ich ein Sprite lade dieses von dem kleinen Vorschaubild (siehe Screenshot) ein 200x200 Bild als Arbeitsbereich kopieren. Leider wird dann wieder nicht richtig dargestellt, sondern verzerrt. Ich finde leider nix von einer anderen Funktion in der Win32. Vielleicht hat einer noch ne Idee, wie ich dies machen könnte. Oder ich müsste das 40x40er in kleinere Bereiche aufteilen und dann versuchen diese in das 200x200er reinzukopieren - hmmm? Bis dann Rolf
Frank Abbing
| Datum:28.05.02 20:26 |
Hi Rolf, die Verzerrungen sind unvermeidlich, eventuell kannst du mal die API SetStretchBltMode() ausprobieren. Im Grunde bleibt dir nichts anderes übrig, als per GetPixel die Farbe des Pixels abzutasten und dann an passender Stelle ein Quadrat in dieser Farbe zu zeichnen, und das für alle Pixel. Eine andere Möglichkeit, wahrscheinlich auch schneller, wäre, ein Byte-Array zu nutzen, das mit InitExtFX() von dem Sprite erstellt wurde. Dort befinden sich ja alle Pixeldaten als Bytefolgen. Wenn du willst, verrate ich dir das Format der Struktur, die InitExtFX() erzeugt. Aber lieber via persönlicher Mail... Nicht, weil's ein Geheimniss ist, sondern, weil Anfänger hier schwerwiegende Fehler produzieren könnten. Gruß, Frank
Rolf Koch
| Datum:28.05.02 21:09 (webmaster@rokosoft.de) |
Ja Danke Frank das wäre lieb, also muss ich genauso nur umgekehrt laden wie ich es beim Malen mache: Punkt gezeichnet - verkleinert als Pixel naja werd mal kucken ob ich das so mache. Jetzt mach ich mal Pause und spiele Lara Croft 3 hihihihi. Rolf und danke nochmals Frank
Rolf Koch
| Datum:28.05.02 23:34 (webmaster@rokosoft.de) |
Ok - OK hat sich erledigt. Komischerweise verzerrt das Bild nur beim Verkleinern Beim Vergrößern von 40x40 auf 200x200 wird es korrekt angezeigt. Aber nun das absolut komische: Lasse ich das Programm laufen (ich habe kein Waitinput, wegen Cursorbereichsabfrage - nur auf Maustastenabfrage 0,1,2) und ich gehe über einen Button (Tooltip), so wird aufeinmal der ganze Bildschirm mit meinem Programm gefüllt - muss irgendwo die Grafik ausm Speicher sein? Bedeutet: Nicht %hdc sondern %desktop wird bemalt - irgendetwas in diese Richtung bekannt? Rolf
Moritz Kersten
| Datum:29.05.02 00:55 (IsNoMK@gmx.de) |
Ich kann das sogar noch topen !!! Ich hab es mal irgendwie geschafft das eine Animation per CopyExtBmp() in der Taskleiste dargestellt wurde. Die Animation sollte eigentlich auf einem Dialogfenster abgebildet werden spielte sich aber dann in der Taskleiste ab, das sah vielleicht aus ! Lag daran das ich den DC nicht per API GetDC() ermittelt habe sondern per... startpaint handle% fensterdc&=%hdc endpaint da sich bei dir aber alles aud %hdc abspielt kann ich nun auch nicht sagen was dein Fehler ist. *einvölligüberarbeiteter* Moritz
Frank Abbing
| Datum:29.05.02 06:12 |
Hallo, kann ich auch nicht sagen, wie sowas zustande kommt. CopyExtBmp() ist im Grunde nichts anderes als BitBlt() und basiert nur auf Windows-API. Gruß, Frank
Rolf Koch
| Datum:29.05.02 18:45 (webmaster@rokosoft.de) |
Danke Euch beiden - Moritz arbeite nicht soviel am Rechner (vorallem nicht wenn Du partnerlich gebunden bist ) Werde Euch, wenn ich das Problem behoben habe bescheid geben was es war. Kann natürlich sein, daß es mit Startpaint -1 zusammenhängt wegen Savebmp (Dummymäßig). Danke nochmal Rolf
Moritz Kersten
| Datum: 29.05.02 21:40 (IsNoMK@gmx.de) |
Keine Sorge Rolf ! Das völlig überarbeitet bezog sich auf die Arbeit weil ich im Moment dutzende von Überstunden schieben darf weil bei uns eine Sommergrippe umgeht. Meine bessere Hälfte ist auch sehr tolerant und sorgt schon dafür das ich nicht zuviel Zeit hinterm Rechnern verbringe (das aber im sehr positiven Sinne ) Dein Problem hört auf jeden Fall nach einem Handle Problem an, wirst den Fehler schon finden... (ein immernoch überarbeiteter) Moritz

| Zurück zur Übersicht

| Ein kostenloses WebMart Forum WebMart Homepage Tools kostenlos |