estoy tratando de implementar un algoritmo para hacer un balde de pintura, pero resulta que trabajar directamente en la pantalla me supondría bastante problema por el hecho de obtener colores pixel por pixel. Entonces pense en que podría mover la surface a una matriz. pero se puede hacer esto? existe alguna forma?
es más, me preguntaba si, de hecho, se podria guardar conservando un indice para los colores o no
¿Un balde de pintura como la herramienta "fill area" del editor de sprites de GM?
Una opción sería dibujar en la surface y al mismo tiempo actualizar una matriz con la misma información. Esto sería fácil siempre y cuando se dibujen pixeles simples o rectángulos de un sólo color, pero si se dibuja con draw_line u otras primitivas sería muy complicado.
Una mejor alternativa sería copiar la surface a un buffer (con buffer_get_surface), así es mucho más rápido leer la información de un pixel, el problema es manejar el buffer como matriz. Para facilitar el manejo de los datos, se podría copiar el buffer a una matriz (array 2D o ds_grid), el inconveniente es que la memoria utilizada se duplicaría: el buffer usaría la misma cantidad de memoria que la surface (4 bytes por pixel), y la matriz ocuparía el doble de memoria que la surface (8 bytes por pixel). Aún así, es mejor que usar surface_getpixel.