Con questa funzione, potrai ottenere informazioni su tutti i pixel di una surface, ad un costo nettamente inferiore che ciclare ogni pixel con surface_getpixel
ottenendo R G B A di ogni pixel
Procedimento
1) crea una surface e ci disegna sopra qualcosa
Codice: Seleziona tutto
sur = surface_create(w, h);
surface_set_target(sur);
draw_clear_alpha(0, 0);
draw_sprite(my_awesome_sprite, 0, 0, 0);
surface_reset_target();
Codice: Seleziona tutto
buf = buffer_create(w*h*4, buffer_fixed, 4);
buffer_get_surface(buf, sur, 0, 0, 0);
Codice: Seleziona tutto
for(var yy=0; yy<h; yy++){
for(var xx=0; xx<w; xx++){
//ottengo il colore del pixel
var col = buffer_read(buf, buffer_u32);
var a = (col >> 24) & 255;
var r = (col >> 16) & 255;
var g = (col >> 8) & 255;
var b = col & 255;
//test di disegno del pixel ottenuto
draw_set_alpha(a);
draw_set_color(make_colour_rgb(r, g, b));
draw_point(xx, yy);
}
}
- I bytes dei colori sono sequenziati in questo modo ARGB
- I pixels sono ordinati verticalmente