Modificando um pouco a Função Anterior com a ajuda do techrepublic temos uma conversão de RGB para sépia:
SDL_Surface* CSurface::RGB2Sepia( SDL_Surface* Surf_Src){
if(Surf_Src == NULL) { //verify if source surface exists
return NULL;
}
SDL_Surface* Surf_Dest = NULL;
Surf_Dest = SDL_DisplayFormatAlpha(Surf_Src);
if(Surf_Dest == NULL) { //verify if temporary surface exists
return NULL;
}
Uint8 R, G, B, A;
Uint32* srcpixels = (Uint32 *)Surf_Src->pixels;;
Uint32* dstpixels = (Uint32 *)Surf_Dest->pixels;
uint Rintensity, Gintensity, Bintensity;
for(uint y = 0; y != Surf_Src->h; y++){
for(uint x = 0; x != Surf_Src->w ; x++){
SDL_GetRGBA(srcpixels[ ( y * Surf_Src->w ) + x ],Surf_Src->format, &R, &G, &B, &A);
Rintensity = (R * 0.393) + (G * 0.769) + (B * 0.189);
if ( Rintensity > 255 ) Rintensity = 255;
Gintensity = (R * 0.349) + (G * 0.686) + (B * 0.168);
if ( Gintensity > 255 ) Gintensity = 255;
Bintensity = (R * 0.272) + (G * 0.534) + (B * 0.131);
if ( Bintensity > 255 ) Bintensity = 255;
dstpixels[ ( y * Surf_Src->w ) + x ] = SDL_MapRGBA(Surf_Dest->format, Rintensity, Gintensity, Bintensity, A);
}
}
return Surf_Dest;
}
Até!!!!
domingo, 16 de agosto de 2009
convertendo surfaces RGBA para escala de cinza
Eu fiz um trabalhinho de fim de semana no meu projeto então decidi postar aqui para que possa servir de auxílio pra quem precisar, o código é parte da classe surface e serve para fazer um efeito de preto e branco( escala de cinza ) em uma sdl_surface dando efeito de antigo. Segue abaixo:
SDL_Surface* CSurface::RGB2GrayScale( SDL_Surface* Surf_Src){
if(Surf_Src == NULL) { //verify if source surface exists
return NULL;
}
SDL_Surface* Surf_Dest = NULL;
Surf_Dest = SDL_DisplayFormatAlpha(Surf_Src);
if(Surf_Dest == NULL) { //verify if temporary surface exists
return NULL;
}
Uint8 R, G, B, A;
Uint32* srcpixels = (Uint32 *)Surf_Src->pixels;;
Uint32* dstpixels = (Uint32 *)Surf_Dest->pixels;
Uint8 intensity;
for(uint y = 0; y != Surf_Src->h; y++){
for(uint x = 0; x != Surf_Src->w ; x++){
SDL_GetRGBA(srcpixels[ ( y * Surf_Src->w ) + x ],Surf_Src->format, &R, &G, &B, &A);
intensity = 0.2989 * R + 0.5870 * G + 0.1140 * B;
dstpixels[ ( y * Surf_Src->w ) + x ] = SDL_MapRGBA(Surf_Dest->format, intensity, intensity, intensity, A);
}
}
return Surf_Dest;
}
Para quem precisar está aí^^.
Mas uma pequena observação: Não é uma função para ser usada em tempo real!
Até a próxima!!!!
SDL_Surface* CSurface::RGB2GrayScale( SDL_Surface* Surf_Src){
if(Surf_Src == NULL) { //verify if source surface exists
return NULL;
}
SDL_Surface* Surf_Dest = NULL;
Surf_Dest = SDL_DisplayFormatAlpha(Surf_Src);
if(Surf_Dest == NULL) { //verify if temporary surface exists
return NULL;
}
Uint8 R, G, B, A;
Uint32* srcpixels = (Uint32 *)Surf_Src->pixels;;
Uint32* dstpixels = (Uint32 *)Surf_Dest->pixels;
Uint8 intensity;
for(uint y = 0; y != Surf_Src->h; y++){
for(uint x = 0; x != Surf_Src->w ; x++){
SDL_GetRGBA(srcpixels[ ( y * Surf_Src->w ) + x ],Surf_Src->format, &R, &G, &B, &A);
intensity = 0.2989 * R + 0.5870 * G + 0.1140 * B;
dstpixels[ ( y * Surf_Src->w ) + x ] = SDL_MapRGBA(Surf_Dest->format, intensity, intensity, intensity, A);
}
}
return Surf_Dest;
}
Para quem precisar está aí^^.
Mas uma pequena observação: Não é uma função para ser usada em tempo real!
Até a próxima!!!!
domingo, 8 de março de 2009
Bibliotecas Auxiliares da SDL para Symbian S60v3
Eu agora estou um pouco ocupado com o trabalho, faculdade e um pouquinho de lazer nos fins de semana(eu também mereço ^^). Por isso estou um pouco afastado do Blog e não sei quando terei tempo para postar meus tutoriais.
Então decidi que iria postar os meus ports das bibliotecas auxiliares da SDL para facilitar a vida de quem deseja programar para celulares Symbian com o auxílio da SDL e SDL_image( suporta BMP, PNG, TARGA e outras), SDL_mixer( port simples - não fiz muitos testes mas funciona- suporta midi, wav e algo mais) e SDL_ttf( funciona perfeitamente - a lib freetype já vem com port para Symbian). Por enquanto são só essas mas se tiver tempo( e necessidade adiciono outros ports).
Vou achar um lugar para upar os arquivos logo após posto um link com os mesmos. Até.
Então decidi que iria postar os meus ports das bibliotecas auxiliares da SDL para facilitar a vida de quem deseja programar para celulares Symbian com o auxílio da SDL e SDL_image( suporta BMP, PNG, TARGA e outras), SDL_mixer( port simples - não fiz muitos testes mas funciona- suporta midi, wav e algo mais) e SDL_ttf( funciona perfeitamente - a lib freetype já vem com port para Symbian). Por enquanto são só essas mas se tiver tempo( e necessidade adiciono outros ports).
Vou achar um lugar para upar os arquivos logo após posto um link com os mesmos. Até.
terça-feira, 28 de outubro de 2008
Começando pelo início ^^'.
Antes de trazer códigos mais pesados percebi que devo primeiro ensinar o básico de SDL para que mesmo alguem que não tenha conhecido a SDL consiga entender um pouco sobre o que está sendo postado.
Então, após ter mudado o formato do Blog para um que acredito seja mais fácil de ler, vou começar os tutoriais, eles serão pequenos e rápidos pois estou com pouco tempo para escrever.
Então, após ter mudado o formato do Blog para um que acredito seja mais fácil de ler, vou começar os tutoriais, eles serão pequenos e rápidos pois estou com pouco tempo para escrever.
quarta-feira, 15 de outubro de 2008
Criando efeitos visuais com facilidade! *Sprig*
Se você se interessou pelo que a biblioteca SDL_gfx pode fazer - desenho de primitivas, zoom, rotação - deve conhecer a biblioteca Sprig, ao contrário da anterior, que está no estado Unreleased and Unsupported, esta já possui uma prerelease e pelos testes que fiz funciona muito bem(ainda não testei a prerelease mas tenho usado a versão anterior sem problemas). Agora para quem quiser visualizar o funcionamento da mesma eu fiz um pequeno programa para demonstração, consiste em um sprite sendo movido e rotacionado na tela -> Download.
segunda-feira, 25 de agosto de 2008
Configurando as bibliotecas auxiliares
Agora vamos configurar ou instalar as bibliotecas auxiliares do SDL para utilizar em nossos programas, quem ainda não trabalhou com SDL não sabe mas nela falta muita coisa que seria muito útil para programação de jogos, para isso foram criadas várias bibliotecas auxiliares como SDL_image, para carregar imagens de outros formatos como png, jpeg, targa e outros, SDL_gfx ou Sprig, para aplicar efeitos como zoom e rotação à superfícies, SDL_mixer, para carregar e tocar sons e músicas entre muitas outras que facilitam a nossa vida.
Para instalá-las devemos primeiro saber como funcionam, eu vou explicar a configuração d SDL_image e com quase todas as outras é só repetir o processo:
Primeiro baixe os arquivos de desenvolvimento aqui, selecione o pacote SDL_image-devel-1.2.6-VC8.zip, este pacote vem com duas pastas, include e lib. Extraia estas duas pastas para a pasta onde você instalou o SDL, se o descompactador perguntar se você deseja sobrescrever clique em sim e pronto! Você já pode começar a programar com esta biblioteca! Agora uma observação: na pasta lib existem algumas DLLs, elas devem ser copiadas para o diretório do seu executável para que o mesmo possa usar as funções da biblioteca, para garantir que o seu programa funcione em qualquer lugar que esteja copie estas dlls para a pasta system ou system32 do windows.
Para usar as funções é só inserir a diretiva "#include" no topo do seu código e "linkar" o executável à DLL. Para isso vá no seu projeto, na barra de menus clique em project>>build options e na aba link adicione SDL_image. com isso seu programa ira encotrar as funções da biblioteca. Até a proxima.
Para instalá-las devemos primeiro saber como funcionam, eu vou explicar a configuração d SDL_image e com quase todas as outras é só repetir o processo:
Primeiro baixe os arquivos de desenvolvimento aqui, selecione o pacote SDL_image-devel-1.2.6-VC8.zip, este pacote vem com duas pastas, include e lib. Extraia estas duas pastas para a pasta onde você instalou o SDL, se o descompactador perguntar se você deseja sobrescrever clique em sim e pronto! Você já pode começar a programar com esta biblioteca! Agora uma observação: na pasta lib existem algumas DLLs, elas devem ser copiadas para o diretório do seu executável para que o mesmo possa usar as funções da biblioteca, para garantir que o seu programa funcione em qualquer lugar que esteja copie estas dlls para a pasta system ou system32 do windows.
Para usar as funções é só inserir a diretiva "#include
Marcadores:
biblioteca,
C++,
png,
programação C++,
SDL,
SDL_image
Assinar:
Postagens (Atom)