<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>a little of everything that I like</description><title>Jairo Luiz</title><generator>Tumblr (3.0; @jairoluiz)</generator><link>http://jairoluiz.com/</link><item><title>Video</title><description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/qjdbR_7_9nw?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;</description><link>http://jairoluiz.com/post/16579386815</link><guid>http://jairoluiz.com/post/16579386815</guid><pubDate>Fri, 27 Jan 2012 12:17:36 -0300</pubDate></item><item><title> Final Fantasy 7 - Fight On (Boss Theme) by CarboHydroM</title><description>&lt;embed type="application/x-shockwave-flash" src="http://assets.tumblr.com/swf/audio_player_black.swf?audio_file=http://www.tumblr.com/audio_file/13253436537/tumblr_lv66sykKaF1qlyoqd&amp;color=FFFFFF" height="27" width="207" quality="best" wmode="opaque"&gt;&lt;/embed&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;span&gt; &lt;/span&gt;Final Fantasy 7 - Fight On (Boss Theme) by &lt;a href="http://www.carbohydrom.net/" title="CarboHydroM"&gt;CarboHydroM&lt;/a&gt;&lt;/p&gt;</description><link>http://jairoluiz.com/post/13253436537</link><guid>http://jairoluiz.com/post/13253436537</guid><pubDate>Thu, 24 Nov 2011 11:55:00 -0300</pubDate></item><item><title>Paleta de cores no Pygame</title><description>&lt;p&gt;Quem não se lembra de jogar Street Fighter com um amigo, e acontecer dos dois escolherem o mesmo personagem? Sempre se corria o risco de ficar com um Blanka azul…&lt;/p&gt;
&lt;p class="centredimg"&gt;&lt;img src="http://static.jairoluiz.com/images/blanka_vs_blanka.jpg" alt="Blanka vs Blanka" width="400" height="300"/&gt;&lt;/p&gt;
&lt;p&gt;Ou jogar Street of Rage e descobrir que só existem meia dúzia de inimigos, só que com muitas cores diferentes.&lt;/p&gt;
&lt;p class="centredimg"&gt;&lt;img src="http://static.jairoluiz.com/images/street_of_rage.jpg" alt="Street of Rage" width="400" height="300"/&gt;&lt;/p&gt;
&lt;p&gt;Eu sempre me &lt;em&gt;decepcionava&lt;/em&gt;…&lt;/p&gt;
&lt;p&gt;Bem, a idéia desse post e mostrar como usar o recurso de paleta de cores no &lt;a title="Pygame" target="_blank" href="http://www.pygame.org"&gt;Pygame&lt;/a&gt;. Esse é um recurso muito utilizado para se economizar &lt;a title="sprites" target="_blank" href="http://en.wikipedia.org/wiki/Sprite_(computer_graphics)"&gt;sprites&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;O conceito é bem simples e vou exemplificar aplicando uma paleta de cores gerada pelo &lt;a title="Photoshop" target="_blank" href="http://pt.wikipedia.org/wiki/Photoshop"&gt;Photoshop&lt;/a&gt;.&lt;/p&gt;
&lt;p class="centredimg"&gt;&lt;img height="433" width="500" alt="Photoshop Palette" src="http://static.jairoluiz.com/images/photoshop_palette.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;Uma paleta de cores gerada pelo Photoshop (.act), pode ter no máximo 256 cores e possui a seguinte estrutura:&lt;/p&gt;
&lt;pre class="brush: python"&gt;[R, G, B, R, G, B, R, G, B, R, G, B, R, G, B, ...]&lt;/pre&gt;
&lt;p&gt;Uma sêquencia de bytes com os valores de R, G e B.&lt;/p&gt;
&lt;p&gt;Já uma paleta de cores do Pygame, possui a seguinte estrutura:&lt;/p&gt;
&lt;pre class="brush: python"&gt;[(R, G, B), (R, G, B), (R, G, B), (R, G, B), ...]&lt;/pre&gt;
&lt;p&gt;Uma sêquencia, onde cada posição é composta por uma tupla (ou sêquencia) dos valores de R, G, e B.&lt;/p&gt;
&lt;p&gt;Então, o trabalho é ler o arquivo .act e agrupar os valores de R, G e B em tuplas.&lt;/p&gt;
&lt;pre class="brush: python"&gt;from struct import unpack

def load_palette(filename):
  act = open(filename)
  palette = []
  
  # lê o máximo de cores de uma paleta
  for i in range(256):
    # lê 3 bytes (RGB)
    color = act.read(3)
  
  # se não leu nada, termina
  if not color:
    break
  
  # se leu menos de 3 bytes, tem coisa errada
  if len(color) != 3:
    raise SyntaxError, "Bad Photoshop palette file!"
  
  # monta um "triplet" convertendo cada byte em inteiro
  palette.append([ord(c) for c in unpack("ccc", color)])
  act.close()
  
  return palette
&lt;/pre&gt;
&lt;p&gt;Agora, é só criar uma imagem e setar a paleta de cores.&lt;/p&gt;
&lt;pre class="brush: python"&gt;image = pygame.image.load("leona.png")
palette = load_palette("blonde.act")
image.set_palette(palette)
&lt;/pre&gt;
&lt;p&gt;Esse é um exemplo bem simples e não era minha intenção me aprofundar nos fundamentos do Pygame, por isso, só coloquei os trechos de código relativos ao post.&lt;/p&gt;
&lt;p&gt;Um exemplo completo, utilizando o mesmo conceito, pode ser obtido &lt;a title="palette.tar.gz" href="http://static.jairoluiz.com/codes/palette.tar.gz"&gt;aqui&lt;/a&gt;.&lt;/p&gt;
&lt;p class="centredimg"&gt;&lt;img height="261" width="489" alt="Paleta de Cores" src="http://static.jairoluiz.com/images/palette.png"/&gt;&lt;/p&gt;</description><link>http://jairoluiz.com/post/6594664229</link><guid>http://jairoluiz.com/post/6594664229</guid><pubDate>Thu, 16 Jun 2011 15:08:00 -0400</pubDate><category>pygame</category><category>photoshop</category><category>games</category><category>python</category></item></channel></rss>

