• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gooden

Alguem pode explicar 1 código po complicado? :P

3 mensagens neste tópico

BOm eu tou a tentar fazer 1 coisita em vb.net que le um ficheiro spr. arranjei 1 codigo para descompactar mas isto em c++ não entendo. :S

se algum me poder explicar o codigo agradecia. :)

aqui vai ele

unsigned char* Sprites::UnpackSprite(int which)
{
  unsigned char* OutputData;
  if (which == 0)
  {
    OutputData = new unsigned char[32*32*4];
memset(OutputData, 0, 32*32*4);
return OutputData;
  }
  std::map<unsigned short, Sprite*>::iterator it = SpriteCollection.find(which);
  if ((it != SpriteCollection.end()) && (it->second != NULL))
  {
     unsigned char r, g ,b;
     int pos = 0;
     int pix = 0;
     OutputData = new unsigned char[it->second->width*it->second->height*4];
 memset(OutputData, 0xFF, it->second->width*it->second->height*4);
 while(true)
 {
   if(pix >= it->second->width*it->second->height)
     break;

	r = it->second->data[pos];
	g = it->second->data[pos+1];
	b = it->second->data[pos+2];
	pos += 3;
	if(r == 0xFE) r++;
	if(g == 0xFE) g++;
	if(b == 0xFE) b++;
	OutputData[pix*4] = r;
	OutputData[pix*4+1] = g;
	OutputData[pix*4+2] = b;
	if((r == 0xFF) && (g == 0x00) && (b == 0xFF))
	{
		OutputData[pix*4] = 0;
            OutputData[pix*4+2] = 0;
		OutputData[pix*4+3] = 0;
	}
	pix++;

	if(it->second->data[pos] == 0xFF)
	{
          for(unsigned char sp = 0; sp < it->second->data[pos+1]; sp++)
	  {
        if(pix >= it->second->width*it->second->height)
          break;
	    OutputData[pix*4] = r;
		OutputData[pix*4+1] = g;
		OutputData[pix*4+2] = b;
		if((r == 0xFF) && (g == 0x00) && (b == 0xFF))
		{
			OutputData[pix*4] = 0;
			OutputData[pix*4+2] = 0;
			OutputData[pix*4+3] = 0;
	    }
		pix++;
	  }
          pos += 2;
	}
 }
 return OutputData;
    }
  return NULL;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É um pouco dificil de perceber o código sem conhecer o formato da imagem. Tu conheces?

Pelo que vejo, para cada pixel da imagem, o ficheiro tem os valores rgb (red,green,blue) da cor do pixel e valor de intensidade da cor.

Agora os "porquês" de ele comparar com intensidades 255 (0xFF) ou 0, só vendo o tal formato de codificação da imagem...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

isto é um ficheiro spr que contem 2000 imagens +

este codigo descripta o ficheiro spr e apresenta-as numa pasta.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora