| |
|
|
- Seite 1 - |
|
| Hi da bin ich wieder. 2 Fragen hab ich mitgebracht 1.) In meinem Programm habe ich folgende Zeilen: (Normales Windowsfenster) KompilierenMarkierenSeparierenf1&=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) KompilierenMarkierenSeparierendeclare prospeed&,f1&,f2&,bereich#,spriteplan&,sprites&
dim bereich#,100000
$I C:PROFANAKTUELLE PROJEKTELOSINCProspeed_Funktionen.inc
prospeed&=usedll("C:PROFANAKTUELLE PROJEKTELOSProspeed.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 |
|
|
| |
|
|
|
| |
|
- Seite 1 - |
|
| 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 |
|
|
| |
|
|
|
| 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. RocknRolf |
|
|
| |
|
|
|
| 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. RocknRolf |
|
|
| |
|
|
|
| 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. |
|
|
| |
|
|
| |
|
- Seite 2 - |
|
|
| 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 |
|
|
| |
|
|
|
| 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, weils ein Geheimniss ist, sondern, weil Anfänger hier schwerwiegende Fehler produzieren könnten.
Gruß, Frank |
|
|
| |
|
|
|
| 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 |
|
|
| |
|
|
|
| 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 |
|
|
| |
|
|
|
| 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 |
|
|
| |
|
|
|
| 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 |
|
|
| |
|
|
|
| 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 |
|
|
| |
|
|
|
| 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 |
|
|
| |
|
|