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
Bravo même si j'avoue je ne connaissais pas l'existence de ce format
@++
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.

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