Page 1 sur 1

Routine de Chargement des fichier PCX

Publié : dim. 11/juil./2010 18:22
par GallyHC
Bonjour,

Je viens de finir une petite routine de chargement des images au format PCX et je vous la fait partager (comme dab).

Voici l'url http://www.koakdesign.info/?url=04&num=9&val=24

Cordialement,
GallyHC

Re: Routine de Chargement des fichier PCX

Publié : dim. 11/juil./2010 21:30
par GallyHC
N’hésité pas a teste et me faire des remontés d’informations si il y a des problèmes ou si même sa fonctionne très bien :)

Cordialement,
GallyHC

Re: Routine de Chargement des fichier PCX

Publié : dim. 11/juil./2010 21:47
par venom
Fonctionne tres bien sous windows 7 x64 :wink:
Bravo même si j'avoue je ne connaissais pas l'existence de ce format :D





@++

Re: Routine de Chargement des fichier PCX

Publié : dim. 11/juil./2010 22:23
par gildev
Ca ne nous rajeunit pas.
J'avais oublié ce format. :lol:

Re: Routine de Chargement des fichier PCX

Publié : dim. 11/juil./2010 22:26
par GallyHC
Oui il est pas ressent ce format :) mais j'ai adapte une routine que j'avais fait en VB6 en une bonne heure. Je me suis dit que sa pouvez être utile a certain :)

Re: Routine de Chargement des fichier PCX

Publié : lun. 12/juil./2010 11:53
par Ar-S
Merci pour ce partage ! :)

Re: Routine de Chargement des fichier PCX

Publié : lun. 12/juil./2010 14:13
par gnozal
Cela me rappelle Windows 3.1 ...
Merci pour cette contribution.
Je ne l'ai pas testée, mais elle ne me semble pas portable (on ne peut insérer la fonction en l'état dans un autre code).
Je propose la modification ci-dessous (avec #PB_Any) :

Code : Tout sélectionner

;
; Load PCX Image
;
Structure TPEPCXHEADER
  bytManufactor.b
  bytVersion.b
  bytEncoding.b
  bytBitsPerPixel.b
  intXMin.w
  intYMin.w
  intXMax.w
  intYMax.w
  intHDPI.w
  intVDPI.w
  bytColorMap.b[48]
  bytReserved.b
  bytNPlanes.b
  intBytesPerline.w
  intpalette_info.w
  bytFiller.b[58]
EndStructure
Structure TPEPALLETS
  bytColorR.a
  bytColorG.a
  bytColorB.a
EndStructure
;
Procedure.i LoadPCX(Filename.s) ; Charge une image au format PCX (numéro d'image renvoyé par la fonction, 0 si échec)
  Protected Stream
  Protected i.l
  Protected j.l
  Protected k.l
  Protected bdata.a
  Protected llenx.l
  Protected lleny.l
  Protected ltemp.l
  Protected lcount.l
  Protected lfllen.l
  Protected lOffset.l
  Protected Dim Raw.a(0)
  Protected Dim Pallets.TPEPALLETS(255)
  Protected header.TPEPCXHEADER, Image
  ;
  Stream = ReadFile(#PB_Any, Filename)
  If Stream
    lfllen = Lof(Stream)
    ReadData(Stream, header, SizeOf(header))
    k = lfllen - SizeOf(header) - 768
    If k <= 0
      CloseFile(Stream)
      ProcedureReturn #False
    EndIf
    Redim Raw(k)
    ReadData(Stream, Raw(), k)
    FileSeek(Stream, lfllen - 768)
    ReadData(Stream, Pallets(), 768)
    CloseFile(Stream)
    If ((header\bytManufactor = 10) Or (header\bytVersion = 5) Or (header\bytEncoding = 1) Or (header\bytNPlanes = 1) Or (header\bytBitsPerPixel = 8))
      llenx = header\intBytesPerline
      lleny = header\intYMax - header\intYMin + 1
      i = 0
      ltemp = lleny
      Image = CreateImage(#PB_Any, llenx, lleny)
      If Image
        If StartDrawing(ImageOutput(Image))
            While ltemp
              lOffset = 0
              ltemp - 1
              j = (lleny - ltemp) * llenx
              While (lOffset < llenx)
                bdata = Raw(i)
                i + 1
                If (bdata & 192) = 192
                  lcount  = bdata & 63
                  lOffset   + lcount
                  bdata     = Raw(i)
                  i + 1
                  While lcount
                    lcount - 1
                    Plot(j % llenx, (j / llenx) - 1, RGB(Pallets(bdata)\bytColorR, Pallets(bdata)\bytColorG, Pallets(bdata)\bytColorB))
                    j + 1
                  Wend
                Else
                  Plot(j % llenx, (j / llenx) - 1, RGB(Pallets(bdata)\bytColorR, Pallets(bdata)\bytColorG, Pallets(bdata)\bytColorB))
                  lOffset + 1
                  j + 1
                EndIf
              Wend
            Wend
          StopDrawing()
          ProcedureReturn Image
        EndIf
      EndIf
    EndIf
  EndIf
  ;
EndProcedure
;
Define hWnd.l, event.l, ImagePCX.i
hWnd = OpenWindow(0, 0, 0, 800, 600, "LoadPCX", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
If hWnd <> 0
  ImageGadget(0, 0, 0, 800, 600, 0)
  ImagePCX = LoadPCX(OpenFileRequester("Ouvrir un fichier PCX", "", "Archive pcx|*.pcx", 0))
  If ImagePCX
    SetGadgetState(0, ImageID(ImagePCX))
  EndIf
  Repeat
    event = WaitWindowEvent()
  Until event = #PB_Event_CloseWindow
EndIf
Sinon, il y a aussi le code suivant : http://www.purebasic.fr/english/viewtop ... 12&t=27380

Re: Routine de Chargement des fichier PCX

Publié : lun. 12/juil./2010 16:43
par GallyHC
Bonjour gnozal,

Pourquoi dis tu qu'elle n'est pas portable, je l'ai teste sur linux (ubuntu), MacOS et Windows XP . J'ai fait une routine simple de chargment pour le moment, juste pour faire un exemple.

Cordialement,
GallyHC

Re: Routine de Chargement des fichier PCX

Publié : mar. 13/juil./2010 11:07
par gnozal
GallyHC a écrit :Pourquoi dis tu qu'elle n'est pas portable, ...
Bonjour,
j'ai utilisé le mot 'portable' au sens où on peut insérer un code (fichier include par exemple) en l'état dans un autre code sans risque de conflit.
Ce qui n'est pas le cas avec ton code, puisque tu utilises des identificateurs prédéfinis avec risque de conflit avec le programme principal. C'est pourquoi j'ai proposé une solution avec #PB_Any.

Re: Routine de Chargement des fichier PCX

Publié : mar. 13/juil./2010 12:01
par GallyHC
Bonjour gnozal,

Ha oui dans ce cas tu as tout a fait raison et cette routine sert plus d'exemple, apres chacun en fait ce qu'il veut :) et merci pour cette modification, qui peu etre utile.

Cordialement,
GallyHC

Re: Routine de Chargement des fichier PCX

Publié : sam. 17/juil./2010 21:07
par GallyHC
Bonjour gnozal ,

J'ai mis a jour avec tes modifications.

Cordialement,
GallyHC