Es invierno, y ha llegado la época del año para que comience a enfriarse (y para que pronto aparezcan extraños y coloridos sombreros). ¡Escribamos un código para hacer que las imágenes de avatar y otras imágenes se congelen, para que se ajusten al tema!
Entrada
La entrada a las presentaciones para este desafío debe ser una imagen (la imagen que se congelará) y un número (el umbral, que se explicará más adelante).
Puede ingresar la imagen de cualquier manera que su idioma los admita (una ruta de archivo o URL como argumento, tomándola del portapapeles, arrastrando y soltando una imagen, etc.) y en cualquier formato enumerado aquí que exprese colores en RGB (usted puede admitir / requerir RGBA en su lugar si lo desea, pero esto no es un requisito).
También puede ingresar el número de la forma que desee (argumento de línea de comando, STDIN, diálogo de entrada, etc.), con la excepción de codificarlo en su programa (ej. n=10
). Si utiliza una ruta / URL de archivo para la imagen, también debe ingresarse de esta manera.
Salida
El programa debe procesar la imagen de acuerdo con la descripción a continuación y luego enviarla de la forma que desee (a un archivo, mostrándola en la pantalla, colocándola en el portapapeles, etc.).
Descripción
Las presentaciones deben procesar la imagen con los siguientes tres pasos. n
se refiere al número que recibió su programa como entrada junto con la imagen.
Aplique un desenfoque de radio
n
a la imagen de entrada reemplazando los valores R, G y B de cada píxel con los valores R, G y B promedio de todos los píxeles dentro de una distancia den
píxeles de Manhattan , ignorando todas las coordenadas fuera de los límites. (Es decir, todos los píxeles donde la suma de la diferencia en X y la diferencia en Y es menor o igual quen
).(nota: utilicé un desenfoque gaussiano para las imágenes de arriba porque tenía una función incorporada conveniente, por lo que sus imágenes pueden verse un poco diferentes).
Establezca cada píxel en un píxel aleatorio dentro de una distancia de
n/2
píxeles ("distancia" se define de la misma manera que en el paso anterior).Esto se debe hacer recorriendo la imagen y estableciendo cada píxel en un píxel aleatorio en este rango, de modo que algunos píxeles puedan desaparecer por completo y otros puedan duplicarse.
Todos los cambios deben aplicarse al mismo tiempo. En otras palabras, use los valores antiguos de los píxeles (después del paso 1 pero antes de este paso), no los valores nuevos después de establecerlos en un píxel aleatorio.
Multiplique el valor RGB "azul" de cada píxel por 1.5, limitándolo a 255 (o lo que sea el valor máximo para una banda de píxeles) y redondeando hacia abajo.
Reglas
Puede usar bibliotecas de imágenes / funciones relacionadas con el procesamiento de imágenes integradas en su idioma; sin embargo, no puede usar ninguna función que realice una de las tres tareas principales mencionadas en la descripción. Por ejemplo, no puede usar una
blur
función, pero unagetPixel
función está bien.Este es el código de golf , por lo que gana el código más corto en bytes.
fuente
dx <= n && dy <= n
es una representación precisa de la distancia de Manhattan, ¿no es así?Respuestas:
Pitón 2 - 326
339 358Toma aportes del usuario. Archivo primero, luego
n
.Esto probablemente podría ser mucho más golf: P ¡Gracias a @ SP3000 por ideas de golf!
Entrada de muestra: (Windows)
Editar : error corregido donde se propagaba el azul (Martin con n = 20 ya no es un río; _;)
Martin con n = 2:
Martin con n = 10:
Martin con n = 20:
fuente
Python 2 - 617 bytes
EDITAR: golfed algunos, parece que FryAmTheEggMan me ha vencido :)
fuente
Java - 1009 bytes
eh, pensé que podría hacerlo mejor que esto ...
Martin con n = 5:
n = 20:
Yo con 10:
fuente
k&0xFF00
? Además, ¿no podrías usarlo255
en lugar de0xFF
?C, 429 (391 + 38 para definir banderas)
Formato de entrada:
pam
archivo sin comentarios o espacios en blanco adicionales en el encabezado, contenido pasado a través de STDINn
Se requieren argumentos (pueden ser cualquier cosa).Formato de salida:
pam
archivo en STDOUT.Compilar:
-Wl,--stack,33554432
aumenta el tamaño de la pila; esto puede cambiarse o eliminarse, dependiendo del tamaño de la imagen que se procesa (el programa requiere un tamaño de pila mayor que el doble de píxeles por 4).-funsigned-char
tiene uso de gcc enunsigned char
lugar designed char
forchar
. Los estándares C permiten cualquiera de estas opciones, y esta opción solo es necesaria aquí porque gcc usasigned char
de forma predeterminada.Para ejecutar (n = 5):
Nota: Si la compilación en Windows,
stdio.h
,fcntl.h
yio.h
debe ser incluido, y el código añadido al inicio del siguientemain()
con el fin de que el programa de lectura / escritura a STDIN / STDOUT como binario, no en el texto, arroyos (esto es irrelevante en Linux, pero Windows usa en\r\n
lugar de\n
secuencias de texto).Versión comentada
Martin con n = 10:
Martin con n = 20:
Martin con n = 100:
fuente
R, 440 caracteres
Con saltos de línea para legibilidad:
Entrada de muestra:
f(2,"avatar.png")
Resultados con n = 2
... con n = 10
... con n = 20
fuente