| |
|
|
Rolf Leinung | Hallo,
ich habe ein Problem mit dem lighten eines Bildes... KompilierenMarkierenSeparieren
proc hellmacher
declare hdc1&,array1&,array2&
hdc1&=CreateExtBmp(%hdc,800,600)
CopyExtBmp(hdc1&,0,0,800,600,%Hdc,0,0,0)
array1&=InitExtFX(hdc1&)
WhileLoop 140
lighten(%HDC,0,0,array1&,2)
EndWhile
endproc
proc dunkelmacher
declare hdc1&,array1&,array2&
hdc1&=CreateExtBmp(%hdc,800,600)
CopyExtBmp(hdc1&,0,0,800,600,%Hdc,0,0,0)
array1&=InitExtFX(hdc1&)
WhileLoop 140
darken(%HDC,0,0,array1&,2)
EndWhile
endProc
LoadBmp bild.bmp,0,0,0
dunkelmacher
sleep 3000
hellmacher
Das mit dem dunklen machen klappt gut. Nun möchte ich das Gleiche Bild wieder aufhellen. Mit lighten klappt das leider nicht so wie ich das gemacht habe. Kann mir da jemand einen Ratschlag geben?
Freundliche Grüße,
Rolf |
|
|
| |
|
|
|
Frank Abbing | Hab grad getestet, läuft doch perfekt. Lädt dein Prog die Dll vielleicht nicht? Und bitte nur lauffähige Codes testen! [web]https://xprofan.com/hilfe/textb/minimalbeispiel/[/web] |
|
|
| |
|
|
|
Rolf Leinung | Die Dll wird geladen. Sonst würde es sich ja nicht abdunkeln. Das abdunkeln funktioniert ja auch. Aber das aufhellen nicht. Der Bildschirm wird zwar aufgehellt, bis er weiß ist, aber das Bild wird nicht eingefadet.
Freundliche Grüße,
Rolf |
|
|
| |
|
|
|
Rolf Leinung | okay, hier nochmal als ganzer qc. KompilierenMarkierenSeparierendeclare neu&
$I prospeed_Funktionen.inc
neu&=usedll(dll/ProSpeed.dll)
@Set(TrueColor, 1)
Window 0,0-800,600
proc hellmacher
declare hdc1&,array1&,array2&
hdc1&=CreateExtBmp(%hdc,800,600)
CopyExtBmp(hdc1&,0,0,800,600,%Hdc,0,0,0)
array1&=InitExtFX(hdc1&)
WhileLoop 140
lighten(%HDC,0,0,array1&,2)
EndWhile
endproc
proc dunkelmacher
declare hdc1&,array1&,array2&
hdc1&=CreateExtBmp(%hdc,800,600)
CopyExtBmp(hdc1&,0,0,800,600,%Hdc,0,0,0)
array1&=InitExtFX(hdc1&)
WhileLoop 140
darken(%HDC,0,0,array1&,2)
EndWhile
endProc
loadbmp grafik/bild.bmp, 0, 0;0
dunkelmacher
sleep 3000
hellmacher
sleep 3000
end
|
|
|
| |
|
|
|
Frank Abbing | Die Funktion macht in deinem Code, was sie soll. Du verdunkelst den Bildschirn zu einer schwarzen Fläche und machst ihn dann wieder heller bis er weiss ist. Während dieser Zeit werden deine Bilddaten natürlich kontinuierlich geändert, sodass das Ausgangsbild längst verloren ist. Lighten() macht das Bild immer heller, und bei einer schwarzen Ausgangsfläche wird es somit weiss! Wenn du die dunkle Fläche wieder zu einem Bild aufhellen willst, musst du AlphaTrans() oder SemiTrans() verwenden. In der Anleitung findest du Beispiele dazu.
Und bitte Sourcecode hier in Codetags setzen! So, nur ohne Leerzeichen:
[ code] Hier steht Quellcode [ /code] KompilierenMarkierenSeparierenfxhandle1&=LoadExtBmp(0,%hdc) Handle 1: leere Bitmap erzeugen
name$=Bild.bmp
fxhandle2&=LoadExtBmp(addr(name$),%hdc) Handle 2: Bild laden, z.B. 640x480 groß
CopyExtBmp(fxhandle1&,0,0,640,480,%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
|
|
|
| |
|
|
|
Rolf Leinung | Danke für die rasche Antwort. kann es sein das sich da irgendwo noch ein Fehler befindet? KompilierenMarkierenSeparierendeclare fxhandle1&, name$,bytearray1&, fxhandle2&,bytearray2&, neu&
$I incprospeed_Funktionen.inc
neu&=usedll(dll/ProSpeed.dll)
@Set(TrueColor, 1)
Window 0,0-800,600
fxhandle1&=LoadExtBmp(0,%hdc)Handle 1: leere Bitmap erzeugen
name$=bild.bmp
fxhandle2&=LoadExtBmp(addr(name$),%hdc)Handle 2: Bild laden, z.B. 640x480 groß
CopyExtBmp(fxhandle1&,0,0,640,480,%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
EndWhile 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
Das Program startet kurz, und wird sofort wieder beendet. Passieren tut aber nix.
Freundliche Grüße,
Rolf |
|
|
| |
|
|
|
Rolf Leinung | Dein Fehler steckt in dieser Zeile:
fxhandle1&=LoadExtBmp(0,%hdc)Handle 1: leere Bitmap erzeugen
> Eine leere Bitmap erzeugst du aber mit CreateExtBmp().
Hallo Frank,
Mein Fehler steht in Deiner Prospeed-Anleitung genau so zu SemiTrans Vielleicht bei einem Update mal anpassen, eh da noch mehr drüber stolpern, die ähnlich wenig Ahnung haben wie ich
Freundliche Grüße,
Rolf |
|
|
| |
|
|
|
| @Rolf: Es wäre mehr als höflich wenn Du Deine Postings überarbeitest und das Code-Tag wie von Frank bereits erklärt korrekt anwendest. Wenn es alle schaffen wirds bei Dir auch klappen.
Mfg, Chuck Norris. (Achte meinen RoundHouseKick welcher Dich pulverisiert durch die mieseste auf der Erde existierende Kanalisation jagen kann in der Du verteilt Dein übriges Dasein fristen würdest! ) |
|
|
| |
|
|
|
Frank Abbing |
Mein Fehler steht in Deiner Prospeed-Anleitung genau so zu SemiTrans Vielleicht bei einem Update mal anpassen, eh da noch mehr drüber stolpern, die ähnlich wenig Ahnung haben wie ich
Ah jetzt ja. Ich war fälschlicherweise von LoadExtImage() ausgegangen... LoadExtBmp() darf als ersten Parameter eine Null beinhalten. In dem Fall entspricht die Grösse der neuen Bitmap die der maximalen Größe des aktuellen Bildschirms (%maxx, %maxy). Die Größe der anderen Bitmap aber beträgt eine andere und darum kracht es. Ich werde meine Hilfe dahingehen ändern, danke! Bin ja sowieso mit Version 3.0 der ProSpeed beschäftigt. |
|
|
| |
|
|