AIMG-mostrar imagem fraquimentada em pontos aleatórios

Publicado por Samuel Leonardo 09/12/2008

[ Hits: 5.983 ]

Homepage: localhost

Download AIMG-imagem fraquimentada.tar.gz




   Este script mostra como "despedaçar" uma imagem, no formato bmp, na tela usando a liSDL, mostrando antes por 3 segundos a imagem original.

Acompanha uma versão pré-compilada para download e o WallPapper linux.6.bmp.

ATENÇÃO: é preciso ter antes os arquivos de desenvolvimento da libSDL instalados.

Para compilar: gcc -o imagem imagem.c -lSDL
Para exzecutar: ./imagem

Visitem meus outros scripts:
http://www.vivaolinux.com.br/scripts/userview.php?login=Sam%20L.

BAIXE TAMBÉM UMA APOSTILA EXCELENTE SOBRE DESENVOVIMENTO DE JOGOS COM SDL:
http://silveira.wordpress.com/2006/09/21/apostila-de-desenvolvimento-de-jogos/
t+!!!

  



Esconder código-fonte

/*
   Este script mostra como "despedaçar" uma imagem, no formato bmp, na tela usando a liSDL,
mostrando antes por 3 segundos a imagem original.
Acompanha uma versão pre-compilada para download e o WallPapper linux.6.bmp.

   ATENÇÃO: você precisam ter antes os arquivos de desenvolvimento da libSDL instalados.
para compilar: gcc -o imagem imagem.c -lSDL
para exzecutar: ./imagem

visitem meus outros scripts:
http://www.vivaolinux.com.br/scripts/userview.php?login=Sam%20L.

BAIXE TBM UM APOSTILA EXCELENTE SOBRE DESENVOVIMENTO DE JOGOS COM SDL:
http://silveira.wordpress.com/2006/09/21/apostila-de-desenvolvimento-de-jogos/
t+!!!
*/
#include <stdio.h>
#include <SDL/SDL.h>

/*numero de imagens mostrada a cada 500 milisegundos */
#define NUMRECT 20 /*OBS: QUANTO MAIOR FOR NUMRECT, MENORES SÃO OS FRAQUIMENTOS*/


int main(int argc, char *argv[])
{
SDL_Init(SDL_INIT_VIDEO);
SDL_Surface *screen, *foto;

foto = SDL_LoadBMP("linux.6.bmp");
if(!foto) printf("ERRO: %s\n",SDL_GetError());

screen = SDL_SetVideoMode(foto->w, foto->h, 0, SDL_ANYFORMAT | SDL_SWSURFACE | SDL_HWSURFACE);
if(!screen)
  {
    printf("ERRO: %s",SDL_GetError());
    SDL_Quit();
    return -1;
  }

SDL_Rect destino, fonte;

fonte = (SDL_Rect){0,0,(int)(foto->w/NUMRECT),(int)(foto->h/NUMRECT)};
destino = (SDL_Rect){0,0,(int)(foto->w/NUMRECT),(int)(foto->h/NUMRECT)};

int fim=0, acres_y=4, acres_x=4;
int i, j;
SDL_Event evento;

SDL_BlitSurface(foto, NULL, screen, NULL);
SDL_Flip(screen);
SDL_Delay(3000);
while(!fim)
{
while(SDL_PollEvent(&evento)) if(evento.type == SDL_QUIT) fim=1;

SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format,0,0,0));
for(i=0;i<foto->w/NUMRECT;i++)
    {
    fonte.x = i*fonte.w;
      for(j=0;j<foto->h/NUMRECT;j++)
          {
          fonte.y = j*fonte.h;
          /* POSIÇÕES ALEATORIAS DAS IMAGENS */
           destino.x = random()%(foto->w - fonte.w) + acres_x;
           destino.y = random()%(foto->h - fonte.h) + acres_y;
          /* 'COLAGEM' DAS IMAGENS EM POSIÇÕES ALEATÓRIAS */
           SDL_BlitSurface(foto, &fonte, screen, &destino);
          }
    }
/* ATUALIZANDO A TELA INTEIRA */
SDL_Flip(screen);
/* AGUARDANDO 500ms ATÉ O PRÓXIMO LOOP */
SDL_Delay(500);
}
SDL_Quit();
return 0;
}

Scripts recomendados

Função HASH em C++

analisador palavras

Listando processos via /proc/PID

Fila em C

Calculando PI usando série de Leibniz


  

Comentários
[1] Comentário enviado por SamL em 20/05/2009 - 13:53h

'{COMENTARIO}'

[2] Comentário enviado por jomarumu em 13/07/2010 - 00:44h

O código está perfeito, muito bom, parabéns, troquei a imagem para uma menor para ver se funcionava e tudo perfeito.

O que deu erro aqui é na hora de salvar, o VOL está mandando correto, mas salva sem o .tar.gz, mesmoa ssim renomeando funciona tudo normalmente.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts