DEFINT A-Z
DECLARE SUB SAVE4BIT (FileName$, MinX, MinY, MaxX, MaxY)
TYPE BMPHeader
ValidID AS STRING * 2
SizeOfFile AS LONG
Reserved AS LONG
OffsetOfBitMap AS LONG
END TYPE
TYPE WindowsBMPInfoHeader
SizeOfHeader AS LONG
Widthz AS LONG
Heightz AS LONG
Planes AS INTEGER
BitsPerPixel AS INTEGER
CompressMethod AS LONG
ImageSizeInBytes AS LONG
HorizontalResol AS LONG
VerticalResol AS LONG
ColorsUsed AS LONG
ImportantColors AS LONG
END TYPE
SCREEN 12
FOR Y = 0 TO 49
LINE (0, Y)-(50, Y), (Y MOD 15)
NEXT Y
x2 = 7
y2 = 7
LOCATE 7, 1: PRINT "Width: "; (x2 + 1), "Height: "; (y2 + 1)
LOCATE 9, 1: PRINT "Use arrow keys to change image size."
LOCATE 10, 1: PRINT "Press the Spacebar to capture as bmp"
SAVE4BIT "4bit.bmp", 0, 0, x2, y2
DO
A$ = INKEY$
IF (A$ <> "") THEN
SELECT CASE (A$)
CASE CHR$(0) + CHR$(72): y2 = y2 + 1 'Up Arrow
CASE CHR$(0) + CHR$(80): y2 = y2 - 1 'Down Arrow
CASE CHR$(0) + CHR$(75): x2 = x2 - 1 'Left Arrow
CASE CHR$(0) + CHR$(77): x2 = x2 + 1 'Right Arrow
CASE CHR$(32): SAVE4BIT "4bit.bmp", 0, 0, x2, y2
END SELECT
IF (y2 < 0) THEN y2 = 0
IF (x2 < 0) THEN x2 = 0
LOCATE 7, 1: PRINT "Width: "; (x2 + 1), "Height: "; (y2 + 1)
END IF
LOOP WHILE A$ <> CHR$(27)
[/highlight]
SUB SAVE4BIT (FileName$, MinX, MinY, MaxX, MaxY)
DIM BMPHeader AS BMPHeader
DIM WindowsBMPInfoHeader AS WindowsBMPInfoHeader
OPEN FileName$ FOR BINARY AS #255
IF LOF(255) <> 0 THEN
CLOSE #255
KILL FileName$
OPEN FileName$ FOR BINARY AS #255
END IF
ImageWidth = (MaxX - MinX) + 1: ImageHeight = (MaxY - MinY) + 1
WindowsBMPInfoHeader.SizeOfHeader = 40
WindowsBMPInfoHeader.Widthz = ImageWidth
WindowsBMPInfoHeader.Heightz = ImageHeight
WindowsBMPInfoHeader.Planes = 1
WindowsBMPInfoHeader.BitsPerPixel = 4
WindowsBMPInfoHeader.CompressMethod = 0
WindowsBMPInfoHeader.ColorsUsed = 16
WindowsBMPInfoHeader.ImportantColors = 16
PUT #255, 15, WindowsBMPInfoHeader
Empty$ = SPACE$(1)
FOR Colors = 0 TO 15
OUT &H3C6, &HFF
OUT &H3C7, Colors
Red$ = CHR$(INP(&H3C9) * 4): Green$ = CHR$(INP(&H3C9) * 4)
Blue$ = CHR$(INP(&H3C9) * 4): AllColorz$ = Blue$ + Green$ + Red$ + Empty$
PUT #255, , AllColorz$
NEXT Colors
Padding$ = SPACE$(0)
IF (4 - ((BMPInfoHeader.Widthz MOD 8) / 2)) <> 4 THEN
Padding$ = SPACE$((4 - ((BMPInfoHeader.Widthz MOD 8) / 2)))
END IF
FOR Loops = MaxY TO MinY STEP -1
FOR Lips = MinX TO MaxX STEP 2
Byte = POINT(Lips, Loops) * 16
IF (Lips + 1 <= MaxX) THEN
Byte = (Byte OR POINT(Lips + 1, Loops))
END IF
Bytez$ = Bytez$ + CHR$(Byte)
Byte = 0
NEXT Lips
PUT #255, , Bytez$
PUT #255, , Padding$
Bytez$ = ""
NEXT Loops
BMPHeader.ValidID = "BM"
BMPHeader.SizeOfFile = LOF(255)
BMPHeader.OffsetOfBitMap = 118
PUT #255, 1, BMPHeader
CLOSE #255
END SUB