<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Generador de arte no del todo aleatorio.Observe el uso de indexación de matriz por parte de la función de pintura para evitar un bucle JSL explícito para establecer una línea vertical de píxeles, más o menos perpendicular a la ruta del pincel.M selecciona los píxeles y blend1 & blend2 hacen que el centro de la pincelada ancha sea opaco y los bordes más transparentes.(Separación de otro proyecto, inspirado en parte por Generación dinámica de imágenes con Python – SWHarden.com .)
FactoryArt - YouTube

Ventana( "x" ) << cerrarventana;
escala = 4;
cejas = 1080 * escala;
bcols = 1920 * escala;
rojo = J(cejas, bcols, 0);
verde = J(cejas, bcols, 0);
azul = J(cejas, bcols, 0);
imagen = 0;
pintura = Función ({fila, columna, color, fila},
{m = Max( 1, Min( cejas, fila - drow ) ) :: Min( cejas, Max( 1, fila + drow ) ), r, g, b, blend1 = ((1 :: Max( 1, Floor ( N columnas ( m ) / 2 ) ))
|| Si ( N Cols( m ) > 1,
(Techo( N Cols( m ) / 2 ) :: 1),
[]
))` / Techo ( N Cols( m ) / 2 ), blend2 = 1 - blend1},
{r, g, b} = Color a RGB (color);
Probar(
rojo[m, columna] = (rojo[m, columna]
mezcla2 + r * mezcla1);
verde[m, columna] = (verde[m, columna]
mezcla2 + g * mezcla1);
azul[m, columna] = (azul[m, columna]
mezcla2 + b * mezcla1);
,
Mostrar (mensaje_excepción, fila, col, r, blend1, blend2, drow, m);
Deténgase();
);
);
franja = Función ({amp1, reps1, fase1, reps2, fase2, fila, h1, h2, mindr, maxdr},
{ic, ir, fractura, dr, color},
reps1 *= 2 * Pi();
reps2 *= 2 * Pi();
fase1 *= 2 * Pi();
fase2 *= 2 * Pi();
amp1 *= escala;
mindr *= escala;
maxdr *= escala;
Para( ic = 1, ic <= bcols, ic++,
fracción = ic/bcols;
ir = fila + amp1 * Sin (fase1 + reps1 * fracción);
dr = Interpolar (Sin (fase2 + reps2 * fracción), -1, mindr, 1, maxdr);
color = Color HLS (Interpolar (fract, 0, h1, 1, h2), .5, 1);
pintar( ir, ic, color, dr );
Si ( Mod( ic, 512 ) == 0,
Espera( .01 );
img = Nueva imagen ("rgb", {rojo, verde, azul});
img << escala( .5 );
img << saveimage( "\VBOXSVR\windowsShare\painter\pics\p" || Right( Char( imageno++ ), 6, "0" ) || ".jpg", "jpg" );
);
);
);
imagen = Función ({nstripes},
{raya, fracción, matiz1, matiz2},
For( esraya = 1, esraya <= nsrayas, esraya++,
Mostrar( esraya );
fract = istripe / nstripes;
nfracción = 1 - fracción;
thisrow = Entero aleatorio (cejas / 200, cejas - cejas / 200);
rfract = esta fila / cejas;
hue1 = Uniforme aleatorio ( .8 * rfract + .3, .8 * rfract + .3 );
Si (tono1 > 1, tono1 -= 1);// dejar que h1 se ajuste
matiz2 = matiz1 + Uniforme aleatorio( 0, .2 );
If( hue2 > 1, hue2 = 1 );// evita el ajuste de h2
raya(
Interpolar (fracción, 0, 50, 1, 10), // amp1
Uniforme aleatorio (.1, .4), // rep1
Uniforme aleatorio (0, 1), //fase
Uniforme aleatorio (0, .2), // rep2
Uniforme aleatorio (0, 1), // fase2
esta fila, // fila de destino
matiz1,
matiz2,
5, // delta mín.
Entero aleatorio (5 + 25 * nfract, 50 + 150 * nfract) // delta máx.
);
)
);
imagen (100);
Espera(0);
img = Nueva imagen ("rgb", {rojo, verde, azul});
img << escala( .5 );
img << saveimage( "\VBOXSVR\windowsShare\painter\pics\p" || Right( Char( imageno++ ), 6, "0" ) || ".jpg", "jpg" );
Nueva ventana ("x", img);