Affichage d'images TNY compressées

Aller en bas

Affichage d'images TNY compressées

Message par Shadow272 le Ven 29 Déc - 20:16

Affichage d'images TNY compressées.

Le programme n'est pas de moi mais je l'ai utilisé plusieurs fois en son temps.
Je vous propose les divers listings et son compacteur [url=Affichage d'images TNY compress%C3%A9es]ici[/url]

Code:

' ******************************************************************
' *                                                                *
' *          VISUALISATION D'IMAGES AU FORMAT TINY    V-2          *
' *                                                                *
' *                       PAONE jean francois                      *
' *                            OCTOBRE 87                          *
' *                                                                *
' ******************************************************************
'
' --------------------------------------sauvegarde de la palette + resolution
SETCOLOR 0,0,0,0
SETCOLOR 1,0,0,0
a$="CHARGEMENT"
b$="EN"
c$="COURS"
DEFTEXT 2,16,0,26
TEXT 70,50,a$
TEXT 140,100,b$
TEXT 115,150,c$
FOR i=1 TO 7
  SETCOLOR 1,i,i,0
  PAUSE 6
NEXT i
a$=""
b$=a$
c$=a$
c$=MKI$(0)+MKI$(1911)+MKI$(0)+MKI$(0)+MKI$(&H700)+MKI$(&H740)+MKI$(&H760)+MKI$(&H570)+MKI$(&H70)+MKI$(&H62)+MKI$(&H55)+MKI$(&H46)+MKI$(&H37)+MKI$(&H307)+MKI$(&H407)+MKI$(&H505)
pal$=""
FOR i%=0 TO 15
  pal$=pal$+CHR$(PEEK(&HFFFF8240+i%))
NEXT i%
'
res_ecran%=XBIOS(4)
'
HIDEM
'
' --------------------------------------programme principal
fic$="G:\LG\LG_SOFT.TNY"
@affich_tny(fic$+".tny")
DO
  FOR i%=4 TO 15
    SETCOLOR i%,DPEEK((V:c$)+8+((((i%-4)+n%) MOD 12)*2))
  NEXT i%
  INC n%
  PAUSE 2
  EXIT IF MOUSEK<>0
LOOP
'
' --------------------------------------restauration des parametres de l'ecran
VOID XBIOS(5,L:-1,L:-1,res_ecran%)
' VOID XBIOS(6,L:VARPTR(pal$))
EDIT
'
'
PROCEDURE affich_tny(fic$)
  '
  ' ------------------------------------dimensionnement tableaux
  DIM bloc1%(100,100)
  DIM bloc2%(100,100)
  ecr_dup$=STRING$(32000," ")
  '
  ' ------------------------------------test de l'existence du  fichier.tny
  IF EXIST(fic$)=FALSE
    ALERT 3,"|   FICHIER| INTROUVABLE",1,"RETURN",dummy%
    GOTO fin
  ENDIF
  '
  ' ------------------------------------preparation de la lecture du fichier
  OPEN "i",#1,fic$
  '
  ' ------------------------------------lecture de la resolution de l'image
  res_fic%=INP(#1)
  IF res_fic%>2
    FOR i%=1 TO 4
      a%=INP(#1)
    NEXT i%
  ENDIF
  ' ------------------------------------lecture de la palette de l'image
  pal_fic$=""
  FOR i%=1 TO 32
    pal_fic$=pal_fic$+CHR$(INP(#1))
  NEXT i%
  '
  ' ------------------------------------lecture longueur bloc donnees ø1
  lg1%=INP(#1)*256+INP(#1)
  '
  ' ------------------------------------lecture longueur bloc donnees ø2
  lg2%=INP(#1)*256+INP(#1)
  '
  ' ------------------------------------lecture du bloc de donnees ø1
  adr_bloc1%=VARPTR(bloc1%(0,0))
  BGET #1,adr_bloc1%,lg1%
  '
  ' ------------------------------------lecture du bloc de donnees  ø2
  adr_bloc2%=VARPTR(bloc2%(0,0))
  BGET #1,adr_bloc2%,2*lg2%
  '
  ' ------------------------------------verification du format tny
  IF lg2%*2+lg1%+37-4*(res_fic%>2)<>LOF(#1)
    ALERT 3,"| LE FICHIER N'EST PAS AU|       FORMAT TINY",1,"RETURN",dummy%
    GOTO fin
  ENDIF
  '
  CLOSE #1
  '
  IF res_fic%>2
    SUB res_fic%,3
  ENDIF
  '
  '
  ' *************************************************************************
  ' *              debut  du  traitement  de  l'image  TNY                  *
  ' *************************************************************************
  '
  ' --------------------------initialisation des variables
  d0%=0
  d3%=0
  a2%=adr_bloc1%
  a3%=VARPTR(ecr_dup$)
  d2%=adr_bloc2%
  '
  ' --------------------------calcul des parametres de la trame
  WHILE d3%<>lg1%
    '
    d1%=PEEK(a2%+d3%)
    IF d1%>1
      INC d3%
      IF d1%>127
        d1%=d1%-256
      ENDIF
    ELSE
      a0%=a2%+d3%+1
      z%=PEEK(a0%)*256+PEEK(a0%+1)
      ADD d3%,3
      IF d1%=1
        d1%=-z%
      ELSE
        d1%=z%
      ENDIF
    ENDIF
    '
    ' ------------------------affichage de la trame
    IF d1%>=0
      REPEAT
        DPOKE (a3%+d0%),DPEEK(d2%)
        @suite
        DEC d1%
      UNTIL d1%=0
      ADD d2%,2
    ELSE
      REPEAT
        DPOKE (a3%+d0%),DPEEK(d2%)
        ADD d2%,2
        @suite
        INC d1%
      UNTIL d1%=0
    ENDIF
    '
  WEND
  '
  ' *************************************************************************
  ' *                    fin  du  traitement  de  l'image  TNY              *
  ' *************************************************************************
  '
  ' ------------------------affichage de l'image
  VOID XBIOS(6,L:VARPTR(pal_fic$))
  VOID XBIOS(5,L:-1,L:-1,res_fic%)
  BMOVE VARPTR(ecr_dup$),XBIOS(2),32000
  '
  ' ------------------------attente de la pression d'une touche
  '
  ' ------------------------fin de la procedure AFFICH_TNY
fin:
  ERASE bloc1%()
  ERASE bloc2%()
  '
RETURN
'
'
PROCEDURE suite
  ADD d0%,&HA0
  IF d0%>=&H7D00
    SUB d0%,&H7CF8
    IF d0%>=&HA0
      SUB d0%,&H9E
    ENDIF
  ENDIF
RETURN
avatar
Shadow272
Admin

Messages : 137
Date d'inscription : 28/12/2017
Age : 60
Localisation : Hainaut Belgique

Voir le profil de l'utilisateur http://toutatari.blog4ever.xyz/

Revenir en haut Aller en bas

Re: Affichage d'images TNY compressées

Message par rockyone le Mer 24 Jan - 11:49

Belle explication du format TNY, mais ça ne doit être bien rapide en Basic

rockyone

Messages : 29
Date d'inscription : 14/01/2018

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Affichage d'images TNY compressées

Message par Atlantis le Mar 20 Fév - 18:50

Après il faut voir ce que ça donne en GFA compilé !
Shadow, tu as une idée du ratio de compression ?
Le gain pour une image plein écran (par ex.) ça donne quoi ?
avatar
Atlantis

Messages : 44
Date d'inscription : 20/02/2018
Localisation : Seine et Marne

Voir le profil de l'utilisateur http://www.safargames.fr

Revenir en haut Aller en bas

Re: Affichage d'images TNY compressées

Message par Shadow272 le Mer 21 Fév - 7:53

Le gain n'est pas mauvais mais il y a mieux et plus rapide à la décompression (environ 1/2 seconde compilé ou non grâce à une routine ASM).
Je mettrai ça ce WE.
avatar
Shadow272
Admin

Messages : 137
Date d'inscription : 28/12/2017
Age : 60
Localisation : Hainaut Belgique

Voir le profil de l'utilisateur http://toutatari.blog4ever.xyz/

Revenir en haut Aller en bas

Re: Affichage d'images TNY compressées

Message par rockyone le Sam 31 Mar - 17:56

temps de décompression en assembleur :  0.08 à 0.225 seconde pour les trois résolutions

rockyone

Messages : 29
Date d'inscription : 14/01/2018

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Affichage d'images TNY compressées

Message par Shadow272 le Lun 2 Avr - 7:27

Ok en assembler mais la plupart des participants au forum ne font probablement pas de l'assembler (c'est mon cas Sad ) .
avatar
Shadow272
Admin

Messages : 137
Date d'inscription : 28/12/2017
Age : 60
Localisation : Hainaut Belgique

Voir le profil de l'utilisateur http://toutatari.blog4ever.xyz/

Revenir en haut Aller en bas

Re: Affichage d'images TNY compressées

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum