Skocz do zawartości

Oddzielanie koloru z rysunku?


Rekomendowane odpowiedzi

Opublikowano

Mam pytanie, a mianowicie =)

Czy wiecie jak zrobić oddzielanie kolorów z jednego rysunku?

Czyli np, tworzy się nam się rysunek na którym znajduje się tylko kolor czerwony z danego rysunku?

 

W sumie, nie pytam się o kod,( ale też może być :) ) tylko o pomysł jak to zrobić, bo ja w kodzie raczej sobie poradzę :P

Czekam na szybką odpowiedz, i pozdrawiam :D

Opublikowano

może sprawdzaj pętlą for czy w danej pozycji x i y występuje czerwony, jeśli nie zamaluj pixel na inny kolor np kolor tła :D

 

Edit:

chodzi mi o to co PsichiX owi post niżej. Sprawdzaj pixel po pixelu :P

Opublikowano

Mozna by piksel po pixelu pobierac kolor i wybierac z niego wartosc czerwieni, ale to zbyt pamieciozerne wiec sie nie oplaca.

Opublikowano

Na fizyce to my sie tym nie zajmujemy ;P

Najprosciej jest napisac dlla ktory bedzie to robil o wieeeele wieele szybciej.

Opublikowano

hmmm...

zmajstrowałem takie coś:

create: h=0

 

draw:

for (i=x ; i<x+sprite_width ; i+=1)

{

if (draw_getpixel(i,y+h)=c_red)draw_point_color(i,y+h,c_white)

if (i>=sprite_width+x) i=x ; h+=1

}

 

pokombinuj :P

Opublikowano

u mnie opóźnienie ok 1 sek przy włączaniu. I podczas działania programu z mojego kompa dobiega dziwny cichy syk. :o

 

edit: zwiększcie sobie sprita do 300 :D

Opublikowano

To majstruj, ja nie mam pojęcia o surface :P

 

Przypomniało mi się ktoś dawał taki przykład że zmieniał się kolor części sprita, (efekt ala moje) tylko że nie pamiętam jak to było zrobione i kto do dawał. Poszukaj. :P

Opublikowano

 

Po dlugich i wglebliwych testach okazalo sie, iz ten przyklad dziala 100% szybciej niz przyklad Marka.S. A tak na powaznie to po ustawieniu 300 FPS Max w roomie, po odpaleniu programiku jest... 267 FPS na moim kompie :) Czyli jednym slowem gratulacje Konrad-GM :lol2: Wygrales dzisiejsza bitwe z Marek.S! Gratuluje :sp_ike:

Opublikowano

xDD

 

Poradziłem sobie :jezor:

Nikt nie zgadł, o co chodzi, bo źle formułowałem pytanie xDD

Chodziło mi o uzyskanie rysunku który ma tylko odcień koloru czerwonego :P

 

Teraz pytanie nr 2.

(Tymon miał ten przykład w upload. ale gdzieś się poszedł ...)

Co trzeba zrobić aby mieć czarno biały rysunek?

 

i 3 pytanie,

Czy można (wykonać/zapisać) nowy rysunek , tylko w którym inny jest "kolor" od poprzednika?

Opublikowano

Nie o to chodzi :PP

Powiedzmy , że za rysunek, mamy paletę kolorów.

I w pewnym obiekcie , w DRAW mamy takie coś"

draw_sprite_ext(spr_kolory,-1,x,y,1,1,0,color,1)

a zmienna color=c_red

 

Wtedy, wychodzi nam paleta, tylko z czerwoną barwą. A co trzeba zrobić , aby ten czerwony rysunek był jeszcze czarno biały??

 

I aby nie było za pomocą surface xP

Opublikowano

Niee! xD

Gdy byśmy mieli c_gray to obraz był by ciemniejszy, a nie szarszy.

 

Mi chodzi jak narysować obrazek, z efektem c_red który będzie w skali szarośći

mamy rysunek-paletę:

czerwony=zielony=niebieski (paleta kolorów) :Powiedzmy taką:

i narysujemy ją kolorem c_red

draw_sprite_ext(spr_kolory,-1,x,y,1,1,0,c_red,1)

to wyjdzie nam

czarny=czerwony=czarny

 

I chciałbym aby ten rysunek "czar=czerw=czar" był jeszcze w skali szarości :o

pomocy... xD

Opublikowano

Chyba nie rozumiesz na czym polega blending. ;P

Nie zamienisz zielonego, na szary bez podmiany tych kolorów.

Znowu szary na zielony bardzo łatwo podmienić, wystarczy tylko narzucić na niego inny kolor - czyli blending spritów.

Opublikowano

ja mam :) zaraz go ci tu zapodam :P

 

//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

 

to nie mój skrypt wiec wiesz :)

  • Filar Społeczności
Opublikowano

Cekol, w tym problemie co przedstawiłeś na rysunku, to na takim spricie wystarczy narysować po prostu czerwony kwadrat z odpowiednim blendingiem i tyle, czyli tak jak zaproponował Tymon.

draw_set_color( c_red );
draw_set_blend_mode_ext( bm_zero, bm_src_color );

draw_rectangle(x,y,w,h,0);

//przywracanie domyslnych wartosci
draw_set_color( c_white );
draw_set_blend_mode( bm_normal );

 

I będziesz miał dokładnie ten sam efekt co po prawej stronie.

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...