1

Salut a tous,

Je penses que je n'ai pas posté au bon endroit donc si les admins / modo veulent le déplacer faites le de bon coeur. Voila mon soucis, je suis en train d'ecrire un module pour lire du PNG, pour le format meme j'ai trouvé ceci :

http://www.w3.org/TR/2003/REC-PNG-20031110/

mais mon gros soucis c'est la décompression, on parle de Zlib mais j'ai trous soucis, le C j'y arrives vraiment mais alors vraiment pas, ensuite c'est super gros (Pas pour des Pc mais pour des Ataris), ensuite j'ai pris un paris que j'arrives a tout caser en moins de 5 Kilos, donc si quelqu'un sait ou trouvé des explications un peu plus 'explicatives' sur la décompression car j'ai trouvé que ceci :

http://www.ietf.org/rfc/rfc1951.txt

Merci,

David / GT Sans doc !!
avatar
< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !

2

C'est quoi la question en fait ? Parceque des implémentations de ZIP en C il en existe des centaines sur internet, peut-être pas avec la contrainte de taille que tu t'es fixée, mais ça te donnera au moins le code à adapter.

Après, je n'ai jamais fait de décodeur PNG, mais décompresser le ZIP a priori c'est la partie facile, c'est surtout le reste qui risque de poser problème. Là encore il doit exister pas mal d'exemples disponibles, mais faire tenir le tout en 5ko me semble ambitieux ^^
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

Je recherches le détail (Documentation) de comment décompresser l'image, le format d'encodage du ZIP dans le PNG. Car la doc officielle est plutot succincte sur ce sujet :

13.8 Decompression

The compression technique used in this International Standard does not require the entire compressed datastream to be available before decompression can start. Display can therefore commence before the entire decompressed datastream is available. It is extremely unlikely that any general purpose compression methods in future versions of this International Standard will not have this property.

It is important to emphasize that IDAT chunk boundaries have no semantic significance and can occur at any point in the compressed datastream. There is no required correlation between the structure of the image data (for example, scanline boundaries) and deflate block boundaries or IDAT chunk boundaries. The complete image data is represented by a single zlib datastream that is stored in some number of IDAT chunks; a decoder that assumes any more than this is incorrect. Some encoder implementations may emit datastreams in which some of these structures are indeed related, but decoders cannot rely on this.


En gros débrouille toi !! J'aurais besoin d'une vraie documentation, qui en partant de rien puisse me dire exactement comment décompresser l'image. Faire comme si Zlib n'existait pas.

GT Compressé !!


avatar
< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !

4

C'est expliqué dans ton deuxième lien non ? Quel est le point qui te bloque ?

Sinon tu peux aussi regarder les articles anglais de Wikipedia sur Inflate/Deflate et la compression LZW en général, de mémoire ils expliquent bien.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

5

Edited_992

6

pour la décompression du format deflate (zip n'est que le format du fichier, un peu comme le format vorbis dans les fichier au format ogg) voir dans les sources de zlib, sous dossier contrib, il y a un projet "puff" qui est un décompresseur minimal très facile à comprendre en lisant le code.

7

Orion_ (./5) :
oula tu t'attaque à gros, utilise ça plutôt c'est beaucoup plus simple à utiliser que la libpng + libz


Merci pour le lien, oui je m'attaques a gros mais sinon ou serait le fun ? wink

Merci Squalyl aussi smile


GT Gros ooh
avatar
< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !

8

Une librairie zlib+png en moins de 5 KiB ? Remarque, y'en a bien qui croient aux divinités...

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

9

Kochise (./8) :
Une librairie zlib+png en moins de 5 KiB ? Remarque, y'en a bien qui croient aux divinités...

Kochise


Ca tombe bien je suis athée !!

Je veux pas toute la librairie, juste le necessaire pour decompresser le PNG donc de quoi construire un arbre binaire et de quoi le lire. Tu penses que c'est pas possible en 5 Kilos ? Ma routine de decompression GIF passe dans le cache du 68030 donc fait moins de 256 octets et la difference de vitesse avec le C est d'un rapport 18 !! Et pas encore optimisé !! Donc de quoi decompresser une image PNG en 5 kilos est tout a fait jouable, a force d'ecrire des 'bons gros code en C' sur des PC on en oublie beaucoup de choses wink

GT Pas gros fondu
avatar
< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !

10

Sans vouloir m'avancer, je pense que toutes les personnes qui t'ont répondu savent tout à fait à quoi ressemble un code C prévu pour autre chose qu'un PC, et spécialement quand la cible est un 68k, donc l'avertissement était en connaissance de cause ^^
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

11

Zeph (./10) :
Sans vouloir m'avancer, je pense que toutes les personnes qui t'ont répondu savent tout à fait à quoi ressemble un code C prévu pour autre chose qu'un PC, et spécialement quand la cible est un 68k, donc l'avertissement était en connaissance de cause ^^


Je voulais juste le code C pour le convertir en assembleur, hors de question d'utiliser la librairie comme cela car rien que la Zlib fait 3 fois la taille de mon prog !!!

Je vous presente Raptor :

http://reboot.atari.org/raptor/raptor.html

Raptor fait moins de 4 kilos car il rentre complet dans la memoire d'un des procs de la Jag, et il fait un peu plus que de faire un arbre.

Bon je codes cela et je reviens quand cela tourne smile

GT smile
avatar
< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !

12

Edited_993

13

j'ai pas parlé de src/contrib/puff.c pour rien

c'est un décompresseur de DEFLATE très simple. une bonne base pour optimiser par exemple.

14

S'il n'y avait que la décompression ZIP à implémenter, pourquoi pas, mais ça n'est que la première étape et pas la plus compliquée pour décoder des PNG.

Pour expliquer un peu plus mon post ./10 : on a bien compris que tu voulais le faire en assembleur, on sait très bien qu'une lib en C sur PC prend 20 fois plus de place que son équivalent assembleur optimisé pour une architecture spécifique, et donc quand les réponses s'alignent pour dire "ça semble vraiment chaud" alors ça veut dire qu'a priori tu vas vraiment en chier. Je ne pense pas que tu sois le seul sur ce forum à savoir optimiser un programme, et je t'assure que les avis qui t'ont été donné valent quelque chose, après libre à toi de les ignorer smile (mais du coup je ne comprends pas trop l'intérêt d'avoir posé la question)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

15

la version light de lodepng, picopng fait 500 lignes et 30ko moi je pense que c'est carrément possible.
et la le mec il le pécho par le bras et il lui dit '

16

Ah c'est pas forcément rigoureusement impossible, surtout s'il fait des concessions sur certains formats, mais c'est vraiment pas gagné ^^
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

17

Le PNG est un peu plus lourd que le JPG. Quel est la plus petite routine de décompression JPG qui existe sur Atari ? 6 KiB avec DSP ? Hmmm, voyons...

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

18

Kochise (./17) :
Le PNG est un peu plus lourd que le JPG. Quel est la plus petite routine de décompression JPG qui existe sur Atari ? 6 KiB avec DSP ? Hmmm, voyons...

Kochise


A cette heure, la routine fait 3.5 kilos, et donc supporte les 3 modes non compressés, compressés avec code fixe (Quelques petits fichiers) et compressé avec des codes variables. Tous les filtres sont implémentés (Obligatoire), les images entrelacés sont aussi supportés, les images en niveaux de gris, les image avec palette, les images True Color, l'alpha channel. Il y a bien sur d'inclus le calcul du CRC, des controles des valeurs du fichiers, etc... Voili, voila il me reste juste a rajouter quelques lignes pour le support des images en 1, 2 et 4 bits par pixel, juste dans la routine de convertion.

Je releaserais bientot la routine. Le plus dur ça pas été d'écrire avec la routine avec une telle taille (l'assembleur est un langage court) mais de comprendre la doc et pour cela merci a Zerosquare et Azrael pour leur précieuse aide.

C'est une routine 68000, sur un 68030 par exemple je pourrais encore raccourcir un peu la routine.


Je penses que beaucoup trop de personnes utilisent des langages dit de haut niveau mais cela genere des gros fichiers, on en a oublié la petitesse de l'assembleur.

Voila quelques images d'exemples :

http://www.mirari.fr/xT6R (Image du superbe jeu en dev d'Orion)

http://www.mirari.fr/eoVo

http://www.mirari.fr/jG3x

GT Turbo (C.V.S.D.)
avatar
< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !

19

Classe smile

On peut (ou pourra) donc ouvrir n'importe quel format de PNG avec, il n'y a pas de restrictions ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

20

Zeph (./19) :
Classe smile

On peut (ou pourra) donc ouvrir n'importe quel format de PNG avec, il n'y a pas de restrictions ?


Non aucune restriction du tout, il y a meme une convertion interne pour les images en 16 bits par composante, oui j'ai pensé pareil, on affiche cela sur quoi ? Mais bon je voulais une routine qui lisent tout.

Edit : on peu tout ouvrir

GT smile
avatar
< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !

21

Edited_994

22

GT Turbo (./20) :
Zeph (./19) :
Classe smile

On peut (ou pourra) donc ouvrir n'importe quel format de PNG avec, il n'y a pas de restrictions ?


Non aucune restriction du tout, il y a meme une convertion interne pour les images en 16 bits par composante, oui j'ai pensé pareil, on affiche cela sur quoi ? Mais bon je voulais une routine qui lisent tout.

Edit : on peu tout ouvrir

GT smile
T'as pas pris de photo du joli bateau ?
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

23

GT Turbo (./20) :
Edit : on peu tout ouvrir
Même le 4 bits ? cheeky
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

24

Zerosquare (./23) :
GT Turbo (./20) :
Edit : on peu tout ouvrir
Même le 4 bits ? cheeky


L'ouvrir sans probleme, car le noyau n'intervient pas au niveau du nombre de bits de sortie. C'est le dernier petit truc
avatar
< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !

25

GT Turbo (./24) :
Zerosquare (./23) :
GT Turbo (./20) :
Edit : on peu tout ouvrir
Même le 4 bits ? cheeky


L'ouvrir sans probleme, car le noyau n'intervient pas au niveau du nombre de bits de sortie. C'est le dernier petit truc a finir dans ma routine de convertion pour l'affichage, le support du 1,2 et 4 bit par pixel

avatar
< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !

26

vince (./22) :
T'as pas pris de photo du joli bateau ?


Celui la ?

http://www.mirari.fr/ommu

Et voila support des formats 1,2 et 4 bit par pixel, donc pour résumé tous !!!

Quelques tests et nettoyage et release de la routine


GT smile
avatar
< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !

27

yeah, la bateAu cheeky
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

28

Bon je pouvais plus voir les routines de filtres, donc elles ont été réecrites complètement, et avec l'aide d'Azrael et de Zerosquare, ont arrive a des gains de 60%, voire 70% pour une image smile



GT octopus
avatar
< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !

29

Orion_ (./21) :
super impressionné par le boulot de GT, j'ai vu la routine fonctionner à l'AC et ça déchire !
j'ai perdu mon pari d'ailleurs cheeky

Bien joué GT wink J'aurais pas parié, j'avais une routine de GIF (moins compliqué que le PNG mais quand même) qui était codée en C et tenait sur 3x rien pour GBA. Donc ça ne semblait pas strictement impossible de le faire pour le PNG. Juste qu'il fallait se faire bien chier grin
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

30

Brunni (./29) :
Juste qu'il fallait se faire bien chier grin


C'est exactement le terme, mais merci a Azrael et Zerosquare pour leur aide, bon maintenant reste plus qu'a faire un release officiel smile


GT octopus
avatar
< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !