Perfect Lion

Membros
  • Content Count

    350
  • Joined

  • Last visited

Community Reputation

0 Neutro

About Perfect Lion

  • Birthday 05/13/1983

Contatos

  • MSN
  • Website URL
    http://www.paodemugen.com.br
  • ICQ
    165804726
  • Yahoo
    erick_leao

Perfil

  • Location
    Brasil/SBC
  • Interests
    Ser Criativo........
  1. É eu descobri que está errado na strutura.. o comentário do SubHeader não é 14 e sim 13 pois se você for fazer a conta 19-31 Blank; can be used for comments [14] 31 - 19 = 12 12 + "0" = 13 pois como sabemos ele começa contar o 0 como um lista ;) então se colocar 13 ao invez de 14 no comentarios ele funciona... agora só preciso saber como eu vou fazer para recarregar essa img.. pois eu não posso salvar ela ela só tem que permanecer na memoria. pois só será salvo quando o cara solicitar salvar tal img. etals.. Então eu tenho que mostrar a img mais não salvar e depois carregala.. eu tenho que tentar fazer ele carregar direto da memoria.. alguém tem alguma ideia? A eu num estou conseguindo recuperar a Paleta que são os ultimos 768 do arquivo.. pelo que está informando aí na strutura A eu atualizei o loadSFF.class.py la vai: loadSFF.class.py # -*- coding: iso-8859-1 -*- # Essa biblioteca é onde vou tentar criar o manipulador de IMG PCX from PIL import Image # Biblioteca referente a funções e classes para auxiliar a mesma from utils import * # << Inicio class SFF class SFF(struct): """ #Nome: SFF #Desc: Le arquivo de strutura SFF #Author: Erick Leão (Perfect Lion) - [email protected] - MSN: [email protected] #Site: www.paodemugen.com.br """ Header = struct(); SubHeader = []; msgError = []; Paleta = False; SFFFile = str; TotalLoad = False; def __init__(self,arquivo,modo="r"): """ #Name: INI #Desc: Metodo construtor """ try: self.SFFFile = open(arquivo,modo); except: self.msgError.append("FILE -> Não foi possivel abrir o arquivo"); def header(self): """ #Name: header #Desc: Responsavel por ler e recuperar o Header do arquivo #Param: void #Return: void """ self.Header.signature = self.SFFFile.read(12); # str # assinatura do SFF if self.Header.signature[0:11] == "ElecbyteSpr": self.Header.version = [ calcsize(self.SFFFile.read(1)) # int , calcsize(self.SFFFile.read(1)) # int , calcsize(self.SFFFile.read(1)) # int , calcsize(self.SFFFile.read(1)) # int ]; # Version do sff self.Header.NoGroups = calcsize(self.SFFFile.read(4)); # int Numeros de grupos existentes self.Header.NoImages = calcsize(self.SFFFile.read(4)); # int Numero de imagens existenes self.Header.FirstFileOffset = calcsize(self.SFFFile.read(4)); # int recupera a primeira posiçao em bytes da primeira img self.Header.SizeSubHeader = calcsize(self.SFFFile.read(4)); # int tamanho do subHeader self.Header.PaletteType = calcsize(self.SFFFile.read(1)); # int Tipo de paleta self.Header.BlankSetZero = calcsize(self.SFFFile.read(3)); # int num sei ainda :P self.Header.Comments = self.SFFFile.read(476); # str comentarios else: self.msgError.append("Header -> O header não é um SFF verifique o arquivo;") return def subHeader(self): """ #Name: subHeader #Desc: Responsavel por ler e recuperar o subHeader do arquivo #Param: void #Return: void """ proximo = self.Header.FirstFileOffset; i=0 while i < self.Header.NoImages: # 32 bytes self.SFFFile.seek(proximo); # move o ponteiro até o byte das info da img Next = calcsize(self.SFFFile.read(4)); # 4 bytes recupera o bytes onte se encontra a proxima imagem SubFileLength = calcsize(self.SFFFile.read(4)); # 4 bytes recupera o tamanho do pcx X = calcsize(self.SFFFile.read(2)); # 2 bytes recupera a posiçao X da img Y = calcsize(self.SFFFile.read(2)); # 2 bytes recupera a posiçao Y da img Group = calcsize(self.SFFFile.read(2)); # 2 bytes recupera o grupo a que ela pertence ImgNumber = calcsize(self.SFFFile.read(2)); # 2 bytes numero da img atual Previous = calcsize(self.SFFFile.read(2)); # 2 bytes numro da img anterior Palette = calcsize(self.SFFFile.read(1)); # 1 byte se ela utiliza Paletta Comments = self.SFFFile.read(13); # 13 bytes Comentarios referente a img PCXData = self.SFFFile.read(SubFileLength + (Next - SubFileLength - self.SFFFile.tell())); # recupera os bytes da img self.SubHeader.append( { "Next" : Next #int , "SubFileLength" : SubFileLength #int , "X" : X # int , "Y" : Y # int , "Group" : Group # int , "ImgNumber" : ImgNumber # int , "Previous" : Previous # int , "Palette" : Palette # int , "Comments" : Comments # str , "PCXData" : PCXData # str } ); proximo = Next; # vai para o proxima imagen (byte) if self.TotalLoad != "false" and (i + 1) == self.TotalLoad : break; i += 1; if self.TotalLoad == False and (i + 1) != self.TotalLoad : self.Paleta = calcsize(self.SFFFile.read(Next)); def read(self): """ #Name: read #Desc: Lé o conteúdo do arquivo; #Param: void #Return: void """ if self.SFFFile: self.header(); self.subHeader(); else: self.msgError.append("Read -> O aquivo não foi aberto;") return def debug(self,abilitado=0): """ #Name: debug #Desc: Debuga o sistema caso não retorne nada.. abilitando a mesma informa onde O erro. """ if abilitado: for msg in self.msgError: print msg; # >> Fim class SFF # Inicia a classe chamando o arquivo ele aceita mais 1 paramento # esse outro paramento é o metodo que o arquivo será aberto # o padrão é "r" que é abrir para leitura # mais quando formos grv SFFLoad = SFF("chars/kfm/kfm.sff"); # setá uma quantidade a ser mostrada... isso aqui serve só para a gente # fazer os testes pois ter que ficar fazendo teste e sempre # mostrando todos é ruim em =) #SFFLoad.TotalLoad = 5; # Manda executar e ler o SFF SFFLoad.read(); # Debug opcional quando em 1 mostra os erros que foram encontrado #SFFLoad.debug(1); # SubHeader traz uma lista contendo bibliotecas com os nomes dos campos # Aqui eu fiz com que ele me mostra uma lista do que tenho # Printando na tela o valor deles;) # EX: i = 0; Mostrar = {} Mostrar["inicio"] = 0; Mostrar["fim"] = 0; for x in SFFLoad.SubHeader: if i >= Mostrar["inicio"] and i <= Mostrar["fim"]: print "Posição da próxima imagem: %i" % x["Next"] print "Tamanho..................: %i" % x["SubFileLength"] print "Posição X................: %i" % x["X"] print "Posição Y................: %i" % x["Y"] print "Grupo....................: %i" % x["Group"] print "Número da imagem.........: %i" % x["ImgNumber"] print "Número da imagem anterior: %i" % x["Previous"] print "Paleta...................: %i" % x["Palette"] print "Comentários..............: %s" % x["Comments"] i += 1; im = open("tmp.pcx","w"); im.write(SFFLoad.SubHeader[0]["PCXData"]); im.close();
  2. Eu fiz um teste aqui e tentei abrir o pcx com o PIL e consegui abrir um arquivo normal do PCX com o comando: from PIL import Image im = Image.open("imgem.pcx"); im.show(); E ele me mostro a img na tela.. agora preciso saber como gerar a img com o PIL somente com os dados bytes.. e até agora sem sucesso =/ Eu tentei algo como from PIL import Image imString = open("imagem.pcx","r").read(); im = Image.fromstring("1",(20,20),imString); im.show(); Mais sem exito =/ olha a sintaxe.: Opa acho que sei porque está dando erro na hora que você tenta ler o pcx... anexo tem 1 img o primeiro elemento que você carrega.. esse pcx está funfionando ele é a primeira imagem do grupo 9000 Veja o codigo fonte dele e veja o codigo fonte que está retornando o PCXData mais claro crie um salvar aí.. im = open("imagen.pcx","w"); im.write(SubHeader["PCXData"]); im.close(); depois abre esse arquivo que você acaba de criar e o que está em anexo aqui e veja que há uma diferença pouca no começo pelo - no do anexo tem 4 quadrados e no salvo tem somente 3 .. o que será que estamos fazendo de errado? caso queria eu fiz uma classe para manipular esse sff.. pois depois vou ter que criar um solvar sff =D loadSFF.class.py # -*- coding: iso-8859-1 -*- # Essa biblioteca é onde vou tentar criar o manipulador de IMG PCX from PIL import Image # Biblioteca referente a funções e classes para auxiliar a mesma from utils import * # << Inicio class SFF class SFF(struct): """ #Nome: SFF #Desc: Le arquivo de strutura SFF #Author: Erick Leão (Perfect Lion) - [email protected] - MSN: [email protected] #Site: www.paodemugen.com.br """ Header = struct(); SubHeader = []; msgError = []; SFFFile = str; TotalLoad = "false"; def __init__(self,arquivo,modo="r"): """ #Name: INI #Desc: Metodo construtor """ try: self.SFFFile = open(arquivo,modo); except: self.msgError.append("FILE -> Não foi possivel abrir o arquivo"); def header(self): """ #Name: header #Desc: Responsavel por ler e recuperar o Header do arquivo #Param: void #Return: void """ self.Header.signature = self.SFFFile.read(12); # str if self.Header.signature[0:11] == "ElecbyteSpr": self.Header.version = [ calcsize(self.SFFFile.read(1)) # int , calcsize(self.SFFFile.read(1)) # int , calcsize(self.SFFFile.read(1)) # int , calcsize(self.SFFFile.read(1)) # int ] self.Header.NoGroups = calcsize(self.SFFFile.read(4)); # int self.Header.NoImages = calcsize(self.SFFFile.read(4)); # int self.Header.FirstFileOffset = calcsize(self.SFFFile.read(4)); # int self.Header.SizeSubHeader = calcsize(self.SFFFile.read(4)); # int self.Header.PaletteType = calcsize(self.SFFFile.read(1)); # int self.Header.BlankSetZero = calcsize(self.SFFFile.read(3)); # int or str? self.Header.Comments = self.SFFFile.read(476); # str else: self.msgError.append("Header -> O header não é um SFF verifique o arquivo;") return def subHeader(self): """ #Name: subHeader #Desc: Responsavel por ler e recuperar o subHeader do arquivo #Param: void #Return: void """ proximo = self.Header.FirstFileOffset; i=0 while i < (self.Header.NoImages - 1): self.SFFFile.seek(proximo); # move o ponteiro até o byte da img Next = calcsize(self.SFFFile.read(4)); SubFileLength = calcsize(self.SFFFile.read(4)); X = calcsize(self.SFFFile.read(2)); Y = calcsize(self.SFFFile.read(2)); Group = calcsize(self.SFFFile.read(2)); ImgNumber = calcsize(self.SFFFile.read(2)); Previous = calcsize(self.SFFFile.read(2)); Palette = calcsize(self.SFFFile.read(1)); Comments = self.SFFFile.read(14); PCXData = self.SFFFile.read(SubFileLength); self.SubHeader.append( { "Next" : Next #int , "SubFileLength" : SubFileLength #int , "X" : X # int , "Y" : Y # int , "Group" : Group # int , "ImgNumber" : ImgNumber # int , "Previous" : Previous # int , "Palette" : Palette # int , "Comments" : Comments # str , "PCXData" : PCXData # str } ); proximo = Next; # vai para o proxima imagen (byte) if self.TotalLoad != "false" and (i + 1) == self.TotalLoad : break; i += 1; def read(self): """ #Name: read #Desc: Lé o conteúdo do arquivo; #Param: void #Return: void """ if self.SFFFile: self.header(); self.subHeader(); else: self.msgError.append("Read -> O aquivo não foi aberto;") return def debug(self,abilitado=0): """ #Name: debug #Desc: Debuga o sistema caso não retorne nada.. abilitando a mesma informa onde O erro. """ if abilitado: for msg in self.msgError: print msg; # >> Fim class SFF # Inicia a classe chamando o arquivo ele aceita mais 1 paramento # esse outro paramento é o metodo que o arquivo será aberto # o padrão é "r" que é abrir para leitura # mais quando formos grv SFFLoad = SFF("chars/kfm/kfm.sff"); # setá uma quantidade a ser mostrada... isso aqui serve só para a gente # fazer os testes pois ter que ficar fazendo teste e sempre # mostrando todos é ruim em =) SFFLoad.TotalLoad = 1; # Manda executar e ler o SFF SFFLoad.read(); # Debug opcional quando em 1 mostra os erros que foram encontrado SFFLoad.debug(1); # SubHeader traz uma lista contendo bibliotecas com os nomes dos campos # Aqui eu fiz com que ele me mostra uma lista do que tenho # Printando na tela o valor deles;) # EX: for x in SFFLoad.SubHeader: print "Posição da próxima imagem: %i" % x["Next"] print "Tamanho..................: %i" % x["SubFileLength"] print "Posição X................: %i" % x["X"] print "Posição Y................: %i" % x["Y"] print "Grupo....................: %i" % x["Group"] print "Número da imagem.........: %i" % x["ImgNumber"] print "Número da imagem anterior: %i" % x["Previous"] print "Paleta...................: %i" % x["Palette"] print "Comentários..............: %s" % x["Comments"] fileSFF = open("tmp.pcx","w"); fileSFF.write(SFFLoad.SubHeader[0]["PCXData"]); fileSFF.close(); #fileSFF = Image.open("tmp.pcx"); #fileSFF.show(); utils.py def calcsize(chunk): old = 0; for x in reversed(chunk): old = (old << 8) | ord(x); return old; class struct: pass;
  3. Eu gosto do ";" pois fica mais visivel para o pessoal que está aprendendo a programa onde termina uma linha de script e tals... pois eu vou ver de deixar esse script que estou montando opensource.. então eu estou comentando todo ele.. =D
  4. Opa... gostei em.. tu é o cara mesmo =DDDD cara só me fala uma coisa.. como funciona esse seu utils aí.. o que ele faz? pois está sem comentarios.. então num entendi legal o que ele faz.... =/ Quanto ao gerar a img pcx acho que com a biblioteca PIL tem como você passar os valores.. mais ainda não sei trabalhar com a bliblioteca... =/ se você souber.. me ajuda aí também hahah =D Vlw cara consegui entender o seu utils.py. eu iria resolver com apenas essa função.. def calcsize(chunk): old = 0; for x in reversed(chunk): old = (old << 8) | ord(x); return old; Ela já faz tudo aquilo que você fez... mais gostei do que você fez pois foi uma forma de se chegar ao resultado seguindo passo a passo. Agora preciso só saber como recuperar a img e tals.. alguém sabe usar a biblioteca PIL aí para me dar um toque?
  5. Feito.. está anexado a esse post.. Bem eu estou no caminho agora preciso de ajuda para poder continuar.... pois daqui para frente num tou conseguindo proceguir... Quanto o subheader creio eu que tenho que dar um loop de 32 bites para recuperar tudo até o final do arquivo.. mais antes preciso entender =/ strutura_sff.zip
  6. Fala galera tudo certo? Bem é o seguinte já faz uns 2 meses que estou aprendendo o python e ainda estou no modo TEXTO e não grafico.. então eu resovil então criar um sistema de edição de personagem para uma engine chamada MUGEN que eu achei uma otima ideia para poder aprender o Python. e está sendo já aprendi muita coisa mais ainda estou no modo texto pois se você num sabe o modo texto não adianta ira para o ambiente grafico certo ? hahaha Bem eu programo em php já faz uns 5 anos e de PHP eu entendo e comecei então a partir para o Python uma linguagem mais robusta e prometedora.. e que gostei muito de sua sintaxe que não deixa de ser muito parecido com o PHP por se basea no C Bem vamos ao que intereça eu já sei abrir arquivos e ler também .. o problema está agora em menipular esse conteudo.. essa ferramenta que eu estou criando para editar personagens do MUGEN exite um arquivo chamado fulano.sff que é o Sprite de img do personagem bem até ai tudo ok. Ai que começa a increnca.. o conteúdo dentro do sff é conteúdos bytes. que pelo criador da engine estipulo uma strutura de como gravar e ler esse arquivo eu tenho a strutura aqui /*--| SFF file structure |--------------------------------------------------*\ Version 1.01 HEADER (512 bytes) ------ Bytes 00-11 "ElecbyteSpr\" signature [12] 12-15 1 verhi, 1 verlo, 1 verlo2, 1 verlo3 [04] 16-19 Number of groups [04] 20-24 Number of images [04] 24-27 File offset where first subfile is located [04] 28-31 Size of subheader in bytes [04] 32 Palette type (1=SPRPALTYPE_SHARED or 0=SPRPALTYPE_INDIV) [01] 33-35 Blank; set to zero [03] 36-511 Blank; can be used for comments [476] SUBFILEHEADER (32 bytes) ------- Bytes 00-03 File offset where next subfile in the "linked list" is [04] located. Null if last subfile 04-07 Subfile length (not including header) [04] Length is 0 if it is a linked sprite 08-09 Image axis X coordinate [02] 10-11 Image axis Y coordinate [02] 12-13 Group number [02] 14-15 Image number (in the group) [02] 16-17 Index of previous copy of sprite (linked sprites only) [02] This is the actual 18 True if palette is same as previous image [01] 19-31 Blank; can be used for comments [14] 32- PCX graphic data. If palette data is available, it is the last 768 bytes. \*--------------------------------------------------------------------------*/ Bem agora essa strutura aí pelo que eu entendi eu irei ler ele byte a byte então iria fazer algo como SFFFile = open("fulano.sff","r"); #criando variaveis HEADER Header = {} # 512 bytes Header["signature"] = SFFFile.read(12); Header["version"] = [SFFFile.read(1),SFFFile.read(1),SFFFile.read(1),SFFFile.read(1)]; # [4] Header["NoGroups"] = SFFFile.read(4); Header["NoImages"] = SFFFile.read(4); Header["FirstFileOffset"] = SFFFile.read(4); Header["SizeSubHeader"] = SFFFile.read(4); Header["PaletteType"] = SFFFile.read(1); Header["BlankSetZero"] = SFFFile.read(3); Header["Comments"] = SFFFile.read(476); Mais ai num sei se estou no caminho certo... num sei como recuperar os dados depois =/ quem poderia me dar uma luz? em anexo está o arquivo kfm.sff strutura_sff.rar
  7. Aee pessoal já achei o meu erro nessa mer...... eu estava utilisando a mesma variavel que incrementa na data... "++" para fazer a pesquisa num sei o que tava pensando em utilisar isso ali.... mais valeu... agora o unico problema é a paginação que ta foda.... preciso de ajuda...
  8. Merda de relatorio porque ta dando esse erro???? olha pessoal...... o meu codigo de busca...
  9. sera que alguém poderia me explicar a logica de fazer a paginação???? pois isso é uma coisa muito foda que até hoje não entendi.... depois que eu entender eu irei fazer um tuto para colocar na seção de tuto do forum..... e também vou colocar essa de relatorios pois deve ter muita gente atras disso e num sabe...
  10. Puts eu sei fazer mais o que sei é muito complicado... pois eu peguei um tuto do phpbrasil e achei complicado usar ele não entendi muito.... eu gostaria de entender a logica da paginação... se eu tentender a logica ai eu mesmo monto.... :S
  11. Nosssa agora veio outrou problema........ tem como eu fazer poaginação?????? pois se o usuario colocar a data 01/05/2000 á 01/09/2000 ai to ferrado pois vai virar mo bagunça a consulta.... como eu faria isso???
  12. Olha eu uso esse que eu montei sempre no começo de todas as paginas....
  13. essa parte foi o que eu percebi também ele complicou muito ai colocou muito codigo que poderia não ter...... ex. vou mostrar a mesma coisa que ele fez mais resumido...
  14. p**** é isso ai mesmo eu nem pensei em usar o for que mancada minha.... depois eu crio um tuto sobre esse tipo de relatorio deve ter uma rapa de gente que num sabe.....
  15. Perfect Lion

    Array

    Ai utilisa essa função ai...... eu acho que pode te ajudar pacas.... pois ele so mostra a array que não são repatida ai é so você saber usar ok.. "array_diff" http://br.php.net/manual/pt_BR/function.array-diff.php Fuiz