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
 AutorThema: semitrans problem
Sascha Willecke
Datum:28.04.02 04:41 Antwortenals Email verschicken (sascha@snowboarding-net.de) 


hallo ich habe mal den folgenden demo code kopiert und die grafik angepasst! leider bekomme ich nur eine access violation!

declare fxhandle1&, fxhandle2&, bytearray1&, bytearray2&, name$
fxhandle1&=LoadExtBmp(0,%hdc) 'Handle 1: leere Bitmap erzeugen
name$="logo.bmp"
fxhandle2&=LoadExtBmp(addr(name$),%hdc) 'Handle 2: Bild laden, z.B. 640x480 groß
CopyExtBmp(fxhandle1&,0,0,800,600,%HDC,0,0,0) 'Inhalt des Profanfensters nach Handle 1
bytearray1&=InitExtFX(fxhandle1&) 'Byte-Array zu Handle 1 erzeugen
bytearray2&=InitExtFX(fxhandle2&) 'Byte-Array zu Handle 2 erzeugen

WhileLoop 100
SemiTrans(%HDC,0,0,bytearray2&,bytearray1&,&loop) 'Das Bild wird in 100 Schritten in die
Wend 'Hintergrundgrafik eingeblendet

FreeExtFX(bytearray1&) 'Byte-Array 1 wieder freigeben
FreeExtFX(bytearray2&) 'Byte-Array 2 wieder freigeben
FreeExtBmp(fxhandle1&) 'Handle 1 wieder freigeben
FreeExtBmp(fxhandle2&) 'Handle 2 wieder freigeben

was mache ich nur falsch?

Sascha


Frank Abbing
Datum:28.04.02 10:43 Antwortenals Email verschicken  


Hallo Sascha,

wenn eine grafische Funktion mit zwei Bytearrays arbeitet, dann müßen beide Bytearray aber auch gleich groß sein (siehe Anleitung). Das ist bei dir nicht der Fall.

fxhandle1&=LoadExtBmo(0,%HDC)
Eine leere Bitmap in der aktuellen Windowsauflösung wird angelegt, also 1024x768 ???

fxhandle2&=LoadExtBmp(addr(name$),%hdc) 'Handle 2: Bild laden, z.B. 640x480 groß (oder ist deine Auflösung nur 640x480?)

CopyExtBmp(fxhandle1&,0,0,800,600,%HDC,0,0,0) 'Inhalt des Profanfensters nach Handle 1
Wieder andere Werte ???

Also, du mußt sicher gehen, das beide Bytearray gleich groß sind, z.B. 800x600.
Benutze anstatt LoadExtBmp(0,...) lieber CreateExtBmp(...)

Dann klappt es auch ;-))

Gruß, Frank




Sascha Willecke
Datum:28.04.02 11:38 Antwortenals Email verschicken (sascha@snowboarding-net.de) 


hi frank!

und das ist bei allen effekten so? also allen funktionen die initextfx brauchen!?

Dann wird mir einiges klarer!

Sascha


Frank Abbing
Datum:28.04.02 13:32 Antwortenals Email verschicken  


Hallo Sascha,

genau, das steht aber auch in der Anleitung unter InitExtFX(), und ist ja auch logisch, wenn du zwei Speicher hast, und den einen veränderst und die veränderten Daten in den zweiten Speicher schreibst, und der Speicher ist aber zu klein, um alle daten zu erfassen, schreibst du natürlich in undefinierte Speicherbereiche, und das ist nie gut, oder...?

Gruß, Frank


Sascha Willecke
Datum:28.04.02 20:12 Antwortenals Email verschicken (sascha@snowboarding-net.de) 


ja das stimmt! hatte die anleitung nicht richtig gelesen!

also ich habe ja nicht soviel anhnung von grafikformaten aber kann es eigentlich dann auch sein das verschiedene grafik-qualitäten (truecolor etc.) probleme machen?


Frank Abbing
Datum:28.04.02 20:46 Antwortenals Email verschicken  


Hallo,

nein, unterschiedliche Grafikformate spielen keine Rolle, nur die Breite der Bitmaps muß glatt durch vier teilbar sein.
Intern arbeitet ProSpeed immer mit 24 Bit und geräteunabhängigen HDC's.

Gruß, Frank


Sascha Willecke
Datum:01.05.02 19:24 Antwortenals Email verschicken  


hallo,

also so ganz klappen will es immernoch nicht!

ich habe folgenden code:

declare fxhandle1&, fxhandle2&, bytearray1&, bytearray2&, name$, logo&
fxhandle1&=CreateExtBmp(%hdc,800,600)
fxhandle2&=CreateExtBmp(%hdc,800,600)

name$="pong3dlogo.gif"
logo&=LoadExtImage(addr(name$),%hdc) 'Handle 2: Bild laden, z.B. 640x480 groß

CopyExtBmp(fxhandle1&,0,0,800,600,%HDC,0,0,0) 'Inhalt des Profanfensters nach Handle 1
CopyExtBmp(fxhandle2&,0,0,800,200,logo&,0,0,0)

bytearray1&=InitExtFX(fxhandle1&) 'Byte-Array zu Handle 1 erzeugen
bytearray2&=InitExtFX(fxhandle2&) 'Byte-Array zu Handle 2 erzeugen

WhileLoop 100
SemiTrans(%HDC,0,0,bytearray1&,bytearray2&,&loop) 'Das Bild wird in 100 Schritten in die
Wend 'Hintergrundgrafik eingeblendet

FreeExtFX(bytearray1&) 'Byte-Array 1 wieder freigeben
FreeExtFX(bytearray2&) 'Byte-Array 2 wieder freigeben
FreeExtBmp(logo&)
FreeExtBmp(fxhandle1&) 'Handle 1 wieder freigeben
FreeExtBmp(fxhandle2&) 'Handle 2 wieder freigeben

ein hauptfenster existiert schon und wenn das logo eingeblendet wird dann komme komische grafikfehler (striche und verzerrungen)!

Was kann das schon wieder sein?
Sascha


Frank Abbing
Datum: 01.05.02 21:11 Antwortenals Email verschicken  


Hi Sascha,

zwei Dinge hab' ich in deinem Code entdeckt:

1.) LoadExtImage() hat nur einen Parameter, nicht zwei !!!
2.) fxhandle2& ist nur zu einem Teil mit Grafikdaten gefüllt worden, du kannst nicht davon ausgehen, das neu initierte Grafikflächen immer schwarz sind, manchmal befinden sich noch alte Daten darin...!?

Probier' das mal.
Gruß, Frank


 Zurück zur Übersicht
 

 Ein kostenloses WebMart Forum
WebMart Homepage Tools kostenlos
Shortwin - denn Glück ist kein Zufall!