Lecture image targa (.tga)

Contenu du snippet

Ce snippet permet de lire et de dessiner (a l'aide de drawdot) l'image pixel par pixel.
C'est evidemment assez long (enfin tt depend de la taille de l'image) , mais l'interet est ailleurs :)
On peut ensuite convertir son image targa soit en bmp, soit en jpeg
ah oui, j'oubliai
Pour l'instant ça ne lit que les targa 24bits (les plus communes)
J'étendrai peut être les fonctionnalités si ça vous interresse

Source / Exemple :


alias tga {
  var %tga $+(",$$sfile($+($left($mircdir,1),:\*.tga),Selectionnez l'image à lire,&Selectionner),") 

  bread %tga 0 13 &signature
  if ($calc($bvar(&signature,1,1) + $bvar(&signature,2,1) + $bvar(&signature,9,1)) != 0)  { echo -a Ce fichier n'est pas une image TARGA valide | halt }

  bread %tga 16 1 &bpp
  if ($bvar(&bpp,1,1) != 24) { echo -a Cette image n'est pas codée en 24 bits/pixels | halt }

  bread %tga 12 16 &taille
  var %lx $bvar(&taille,1,1) , %ly $bvar(&taille,2,1) |  var %hx $bvar(&taille,3,1) , %hy $bvar(&taille,4,1)
  var %largeur $calc(256 * %ly + %lx)                 |  var %hauteur $calc(256 * %hy + %hx)

  bread %tga 18 $calc(%largeur * %hauteur * 3) &donnees

  window -CBk0pf +lt $+(@,$nopath(%tga)) -1 -1 %largeur %hauteur

  echo -a ---------------------------------------------------------
  echo -a Affichage de %tga en cours...
  var %ticks $ticks

  var %cpt 1 , %l 1
  while (%hauteur > 0) {
    if (%cpt != 1) { inc %cpt 3 }
    while (%l < %largeur) {
      var %pixel = $bvar(&donnees,%cpt,3)
      tokenize 32 %pixel
      drawdot -r $+(@,$nopath(%tga)) $rgb($3,$2,$1) 1 %l %hauteur 
      ; niveau de gris
      ;drawdot -r $+(@,$nopath(%tga)) $rgb($2,$2,$2) 1 %l %hauteur
      inc %cpt 3
      inc %l
    }

    var %l 1
    dec %hauteur
  }
  echo -a Affichage effectué en $calc($calc($ticks - %ticks) / 1000) sec
  echo -a ---------------------------------------------------------

  var %rep $input(Voulez-vous convertir cette image en bitmap (yes) en jpeg (no) ou ne rien faire (cancel) ?, vn,Conversion) 
  if (%rep == $yes) { drawsave $+(@,$nopath(%tga)) $replace(%tga,.tga,.bmp) | echo -a Image $replace(%tga,.tga,.bmp) crée ! }
  elseif (%rep == $no) { drawsave -q100 $+(@,$nopath(%tga)) $replace(%tga,.tga,.jpg) | echo -a Image $replace(%tga,.tga,.jpg) crée ! }
  else { halt }
}

Conclusion :


rien d'autre à dire !

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.