Sin que haya barras negras, quiero decir. 1080 no es ningún múltiplo de 768, ¿hay algún tipo de pérdida de datos?
pixel-graphics
V0ight
fuente
fuente
Respuestas:
En esencia, una imagen es un grupo de muestras puntuales (leer Un píxel no es un pequeño cuadrado 3 ). Cuando transforma o escala la imagen, necesita volver a muestrearla. Entonces, lo que haces, teóricamente, es tomar muestras puntuales y convertirlas en una función continua. Luego muestreas esa función continua y reconstruyes una señal. Entonces, hay dos o tres fases diferentes aquí.
Tenga en cuenta que ninguno de estos pasos tiene una forma fija. En la práctica, cuando se optimiza, es imposible decir que hay pasos. La transformación en realidad no tiene que ser simple, podría mapear la forma en espiral, etc.
Imagen 1 : Una señal 1-D reconstruida por diferentes filtros.
En la práctica, se sabe bastante sobre la reconstrucción de señales en el campo de procesamiento de señales. Diseñar estos filtros y elegir el correcto es una forma de arte en sí misma. Pero, en esencia, la elección del filtro es una compensación entre desenfoque y timbre . Por supuesto, el algoritmo también tiene otras cualidades, como cuántas instrucciones se necesitan para implementar y qué tan rápido y cuánta memoria necesita, etc., lo que puede ser muy importante en aplicaciones integradas o en tiempo real.
Imagen 2 : Resumen de todo el proceso.
fuente
Existen numerosos algoritmos de aumento y reducción de escala disponibles para escalar imágenes desde cualquier resolución a cualquier otra resolución arbitraria. Cada algoritmo generalmente implica una compensación entre eficiencia, suavidad y nitidez, con diversos grados de cada compensación para diferentes algoritmos.
Consulte este artículo de Wikipedia para ver dichos algoritmos y ejemplos de dichos algoritmos.
El algoritmo más popularmente conocido (y utilizado) es el algoritmo de interpolación Bicubic . Se interpola entre puntos 2D en una cuadrícula rectangular. Usando Splines cúbicas (o Interpolación cúbica), primero interpola en una dimensión (encuentra la fila / columna interpolada), luego interpola la fila / columna interpolada en la otra dimensión.
La interpolación bilineal es similar a la interpolación bicúbica, excepto que la primera interpola usando una función lineal y puede interpolar solo entre dos valores y la segunda usa una función cúbica y puede interpolar entre cuatro valores.
La función simple para la interpolación bicúbica es la siguiente:
donde (x, y) es la posición interpolada y p [] [] es la matriz 2d que representa la cuadrícula 4 * 4.
Consulte este enlace para obtener más información y un código de ejemplo, que realmente ayuda mucho.
fuente
Si bien las otras respuestas dadas son correctas, no estoy seguro de que respondan por completo a su pregunta. Para no obtener barras negras, tiene 2 opciones si el destino no tiene la misma forma (o relación de aspecto) que la fuente:
Hay otra opción, pero no se ajusta a sus criterios: escala uniformemente, pero solo hasta que 1 dimensión sea tan grande como el destino. En este caso, escalarías tanto horizontal como verticalmente en 1.40625 para obtener un resultado de 1440x1080. Esto generalmente se conoce como "escala para adaptarse".
Para cualquiera de estas opciones, puede usar el algoritmo de escala que satisfaga sus necesidades.
fuente