home *** CD-ROM | disk | FTP | other *** search
- {
- KB> Hello. I was wondering if someone could tell me how to read in PCX
- KB> files in Turbo Pascal using either resolution (320 X 200, 640 X 480
- KB> etc.) with 256 colours. I was using a program called clip but it does
- KB> not read PCX files that are in 256 colours. Any help is appreciated.
-
- I can help you with the 320x200x256 mode.
-
- Here come a little program (mostly in asm) to display a PCX-image in that
- resulution.
-
- To load a PCX-image, use the procedure PCX_LOAD(PicName, Init), where
- PicName = Path+Filename of image to be displayed.
- Init = Should the procedure init mode 13h before displaying the pic?
-
- Hope you can use this.
- }
-
- program PCX_LOAD;
-
- {$G+}
-
- Var
- Pic:Array [0..63999] Of Byte;
- Pcx:File;
- Read_Result:Integer;
-
- Procedure Load_Pcx(Name:String; Init:Boolean);
- begin
- If Init Then
- Asm
- Mov AX, 13h
- Int 10h
- End;
- Asm
- Mov AL, 0
- Mov DX, 03C8h
- Out DX, AL
- Inc DX
- Mov CX, 1023
- @l1: Out DX, AL
- Loop @l1
- End;
- Assign(PCX, name);
- Reset(PCX, 1);
- BlockRead(PCX, Pic, SizeOf(Pic), Read_Result);
- Close(PCX);
- Asm
- Cld
- Mov AX, 0A000h
- Mov ES, AX
- Lea BX, Pic
- Add BX, 128
- Xor DI, DI
- Xor DX, DX
- Xor AX, AX
- Xor CX, CX
- @l2: Mov AL, [BX]
- Inc BX
- Cmp AL, 0C0h
- Ja @r1
- Stosb
- Inc DX
- Jmp @r3
- @r1: Sub AL, 0C0h
- Mov CL, AL
- Add DX, AX
- Mov AL, [BX]
- Inc BX
- Rep Stosb
- @r3: Cmp DX, 64000
- Jnz @l2
- Inc BX
- Mov DX, 03C8h
- Mov AL, 00h
- Out DX, AL
- Inc DX
- Mov CX, 255
- @r4: Mov AL, [BX]
- Shr AL, 2
- Out DX, AL
- Mov AL, [BX+1]
- Shr AL, 2
- Out DX, AL
- Mov AL, [BX+2]
- Shr AL, 2
- Out DX, AL
- Add BX, 3
- Loop @r4
- End;
- End;
-
- begin
- load_pcx('D:\artpack\esilogo.PCX', True);
- Asm
- Mov AH, 000h
- Int 16h
- Mov AX, 003h
- Int 10h
- End;
- end.
-
- Oh, btw. this program can't handle a picture larger than 64000 bytes, but i
- hope you can find a way around that. If not, write a mail to me, and i will
- see what i can do...
-
- TTYL
- Allan Bang Andersen