Routine de Chargement des fichier PCX

Programmation d'applications complexes
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Routine de Chargement des fichier PCX

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Routine de Chargement des fichier PCX

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Routine de Chargement des fichier PCX

Message 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





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
gildev
Messages : 380
Inscription : mar. 19/juin/2007 10:28
Localisation : Picardie (France)

Re: Routine de Chargement des fichier PCX

Message par gildev »

Ca ne nous rajeunit pas.
J'avais oublié ce format. :lol:
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Routine de Chargement des fichier PCX

Message 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 :)
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Routine de Chargement des fichier PCX

Message par Ar-S »

Merci pour ce partage ! :)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Re: Routine de Chargement des fichier PCX

Message 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
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Routine de Chargement des fichier PCX

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Re: Routine de Chargement des fichier PCX

Message 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.
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Routine de Chargement des fichier PCX

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Routine de Chargement des fichier PCX

Message par GallyHC »

Bonjour gnozal ,

J'ai mis a jour avec tes modifications.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Répondre