geladenes bild schwarz/weiß machen
-
-
Da gibts nur eine komplizierte Lösung:
GML-Quellcode
- //Monochrome by GearGOD
- //Arguments: source sprite, fore, back
- //Return: sprite handle
- //Use: will return a monochrome version of sprite
- //where fore replaces white and back replaces black
- //Eg: monochrome(sprite,c_white,c_black) will return a black and white copy
- //and monochrome(sprite,c_blakc,c_white) will return an inverted b/w copy
- var w,h,asp,tsp;
- w = sprite_get_width(argument0)
- h = sprite_get_height(argument0)
- draw_clear(argument1)
- asp = sprite_create_from_screen(0,0,w,h,0,0,0,1,0,0)
- sprite_set_alpha_from_sprite(asp,argument0)
- draw_clear(argument2)
- draw_sprite(asp,0,0,0)
- sprite_delete(asp)
- asp = sprite_create_from_screen(0,0,w,h,0,0,0,1,sprite_get_xoffset(argument0),sprite_get_yoffset(argument0))
- draw_clear(c_black)
- d3d_set_fog(1,c_white,0,0)
- draw_sprite(argument0,0,sprite_get_xoffset(argument0),sprite_get_yoffset(argument0))
- d3d_set_fog(0,c_white,0,0)
- tsp = sprite_create_from_screen(0,0,w,h,0,0,0,1,0,0)
- sprite_set_alpha_from_sprite(asp,tsp)
- sprite_delete(tsp)
- return asp
© 2008 by Teamgrill Productions
-
whiterock schrieb:
(also in graustufen)MasterXY schrieb:
//Monochrome by GearGOD
(Leider weiß ich auch keine andere Lösung dafür)
-
Ich hab mich mal rangesetzt, weil mir die Methode von GearGOD zu umständlich ist. Ohne Nutzung von Surfaces war bei mir allerdings mehr als ein Step nötig, da ich die Hintergrundfarbe zwischendurch ändern muss. Allerdings besteht diese Variante aus viel weniger Code. Es macht Sinn, wenn man ein Objekt verwendet, welches nur diesen einen Zweck verfolgt und danach wieder gelöscht wird.
Hier die Funktionsweise:
1. Hintergrundfarbe: weiß
2. temporäres Sprite (gleiche Maße wie das Farbsprite) vom weißen Bildschirm erzeugen
3. Alphawerte vom Farbsprite auf temporäres Sprite setzen
3. Hintergrundfarbe ändern: schwarz
4. temporäres Sprite auf Hintergrund zeichnen
5. schwarz-weiß Sprite vom Bildschirm erzeugen█████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
█████ ███████ ███ your █████ ████ government. -
Das Script von GearGod scheint mir ebenfalls etwas zu viel des Guten. Vor allem fällt mir gerade auf, dass er d3d_set_fog benutzt, wozu auch immer das gut sein soll. Scheint mir als hätte er dort Überreste von früheren Scripts drin. Hier mal eine meines Erachtens recht kurze Variante des Script, die vom Prinzip her nichts anderes macht als auch die Methode von mauge, jedoch als einzelnes Script.
GML-Quellcode
- // argument0 = sprite
- // argument1 = black color
- // argument2 = white color
- var w, h, tmp;
- w = sprite_get_width(argument0);
- h = sprite_get_height(argument0);
- draw_clear(argument2);
- tmp = sprite_create_from_screen(0,0,w,h,false,false,false,true,0,0);
- sprite_set_alpha_from_sprite(tmp,argument0);
- draw_clear(argument1);
- draw_sprite(tmp,0,0,0);
- sprite_delete(tmp);
- tmp = sprite_create_from_screen(0,0,w,h,false,false,false,true,0,0);
- return tmp;
-