[Solicitud] Ejemplo de escalado o stretching

Solicite, consulte o publique recursos de referencia para desarrolladores.

[Solicitud] Ejemplo de escalado o stretching

Notapor uguru » Vie Dic 07, 2007 9:15 am

Hola!

Este es mi primer mensaje por este foro, aunque visito la página desde hace algún tiempo. Un saludo a todos. :wink:

Hace tiempo que busco la forma de pasar una una imagen almacenada e un array a una SDL_Surface, ambos de distinto tamaño, y que esta se encuadre en el tamaño de la superficie.

Dicha funcion seria llamada con asiduidad asi que habría de ser rápida.

A ver si alguien me puede echar una mano.

Gracias por anticipado.

Un saludo
Avatar de Usuario
uguru
 
Mensajes: 10
Registrado: Vie Oct 12, 2007 8:40 am

Notapor hugoruscitti » Vie Dic 07, 2007 2:06 pm

Saludos, aún no me queda muy clara tu necesidad, pero si lo que estás
buscando es escalar superficies, puedes utilizar bibliotecas que realicen
esa tarea. Usar bibliotecas suele ser una buena idea porque utilizas
rutinas rápidas y estables.

En python y pygame las transformaciones mas sencillas se pueden realizar
utilizando el módulo "transform":

http://www.pygame.org/docs/ref/transform.html

Por ejemplo, para duplicar el tamaño de una superficies puedes hacer lo
siguiente:

Código: Seleccionar todo
[...]
personaje = pygame.image.load("mono.png")
personaje_escalado = pygame.transform.rotozoom(personaje, 0, 2)

# Se imprime la superficie generada
screen.blit(personaje_escalado, (0, 0))
[...]



En caso de utilizar el lenguaje de programación C y SDL, tendrías que instalar
una biblioteca adicional llamada SDL_gfx. Esta biblioteca incluye funciones
para escalar superficies, crear primitivas gráficas (círculos, cuadrados,
polígonos...) y otras cosas mas. Te dejo la dirección de su sitio:

http://www.ferzkopp.net/joomla/content/view/19/14/

Saludos.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Notapor uguru » Sab Dic 08, 2007 12:17 pm

Buscaba algo mas básico, y en C a ser posible, por el momento he venido usando esta función pero no me funciona bien en todos los casos

Código: Seleccionar todo
void PutImage_fit(void)
{
  int x_d, x_s;
  int y_d, y_s;
  int y;
  Uint16 *ptr_dst = (Uint16 *)screen->pixels;
  Uint16 *ptr_src = XBuf;

  for  (y = 0; y < DST_HEIGHT; y++) {
    y_s = ((SRC_HEIGHT * y) / DST_HEIGHT);
    y_s = y_s  * SRC_WIDTH;
    y_d = y * SCR_WIDTH;
    for (x_d = 0; x_d < DST_WIDTH; x_d++) {
      x_s = 16 + (((x_d << 1) + x_d) >> 2);
      ptr_dst[y_d + x_d] = ptr_src[y_s + x_s];
    }
  }
}



Un saludo
Avatar de Usuario
uguru
 
Mensajes: 10
Registrado: Vie Oct 12, 2007 8:40 am

Notapor uguru » Mié Dic 12, 2007 7:43 pm

Alguna idea :?:
Avatar de Usuario
uguru
 
Mensajes: 10
Registrado: Vie Oct 12, 2007 8:40 am


Volver a Artículos, traducciones y documentación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados