2008-09-20 9 views
5

Necesito poner un borde de degradado combinado alfa alrededor de una imagen. Mi problema es mezclar las esquinas para que queden lisas donde se encuentran los gradientes horizontales y verticales. Creo que hay un algoritmo estándar que resuelve este problema. Creo que incluso lo encontré en la escuela hace muchos años. Pero no he podido encontrar ninguna referencia a uno en varias búsquedas web.Algoritmo para mezclar esquinas rellenas de degradado en la imagen

(He implementado un patrón de relleno radial en la esquina, pero la transición todavía no es lo suficientemente suave.)

Mis preguntas:

  1. Si hay un algoritmo estándar para este problema, ¿cuál es el nombre de que, y aún mejor, cómo se implementa ?

  2. Renunciando a cualquier algoritmo estándar, Cuál es la mejor manera de determinar el valor del píxel deseada para producir un gradiente suave en las esquinas? (Agrega un transición suave de la gradiente vertical a la gradiente horizontal.)

EDITAR: Así imaginar tengo una imagen I a insertar en la parte superior de una imagen más grande. La imagen más grande es de color negro sólido y la imagen más pequeña es de color blanco sólido. Antes de insertarlo, quiero mezclar la imagen más pequeña con la más grande estableciendo el valor alfa en la imagen más pequeña para crear un "borde" transparente a su alrededor para que se "desvanezca" en la imagen más grande. Hecho correctamente, debería tener un degradado suave de negro a blanco, y lo hago en todas partes, excepto en las esquinas y el borde interior.

En el borde del borde de degradado, cerca del centro de la imagen, el valor sería 255 (no transparente). A medida que el borde se acerca al borde exterior, el valor alfa se acerca a 0. En las esquinas de la imagen donde se juntan los bordes horizontales vert &, termina con lo que equivale a una línea diagonal. Quiero eliminar esa línea y tener una transición sin problemas.

Lo que necesito es un algoritmo que determina el valor alfa (0 - 255) para cada píxel que se superpone en la esquina de una imagen cuando los bordes horizontales y verticales se encuentran.

Respuesta

2

Probablemente estás multiplicando los dos gradientes donde se superponen, ¿verdad?

No sé sobre un algoritmo estándar. Pero si usa un gradiente en forma de signoide en lugar de uno lineal, eso debería eliminar el borde visible donde los dos se superponen.

Una función sigmoide simple es smoothstep (t) = t t (3 - 2 * t) donde 0 < = t < = 1

+0

Este parece prometedor. No estoy seguro de querer meterme con XNA (esta es una aplicación de C# y creo que XNA es la mejor (¿solo?) forma de obtener un paso suave), pero estoy trabajando en una prueba ahora con ella y decidirá si quiero usarla o hacerla mía en función de los resultados. – TMarshall

+0

Smoothstep es simplemente la función (muy simple) que describí; ha estado presente durante años y no es exclusivo de XNA. –

+0

Acabo de hacer una implementación, mientras que hace que los bordes del degradado sean más agradables, las esquinas tienen el mismo problema. El verdadero problema es la ilusión óptica creada por los gradientes. No hay 'error' para el paso lineal o suave, pero aún 've' una línea a menos que bloquee el restablecimiento del degradado de su visión. –

0

Si no necesita que se pueda cambiar el tamaño, entonces puede usar un mapa alfa simple.

Sin embargo, una vez usé un fundido Gaussiano simple, con la media en el lugar donde quería que fueran los últimos píxeles totalmente opacos. Si eso tiene sentido.

Cuestiones relacionadas