1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
DECLARE SUB SAVEBMP (BMPFileName$) TYPE BMPFileHeader FileType AS STRING * 2 Size AS LONG Reserved1 AS INTEGER Reserved2 AS INTEGER OffBits AS LONG END TYPE TYPE BMPInfoHeader Size AS LONG ImageWidth AS LONG ImageHeight AS LONG Planes AS INTEGER BitCount AS INTEGER Compression AS LONG SizeImage AS LONG XPelsPerMeter AS LONG YPelsPerMeter AS LONG ClrUsed AS LONG ClrImportant AS LONG END TYPE ' SCREEN 12 'draw something RANDOMIZE TIMER FOR i% = 0 TO 12 READ c& PALETTE i%, c& NEXT DATA &h5,&h10,&h20,&h30,&h500,&h1000,&h2000,&h3000,&h50000,&h100000,&h200000, DATA &h300000,&h500000, FOR k% = 1 TO 20 x% = RND * 640 + 1 y% = RND * 480 r% = RND * 80 + (80 \\ 8) clr% = INT(RND * 4) * 4 a = RND * 3.141592 b = RND * 3.141592 / 1.5 x1% = CINT(COS(a) * SIN(b) * 100) y1% = CINT(SIN(a) * SIN(b) * 100) z1% = CINT(COS(b) * 100) FOR i% = -r% TO r% i1% = i% * 100 / CSNG(r%) FOR j% = -SQR(r% * r% - i% * i%) TO SQR(r% * r% - i% * i%) j1% = j% * 100 / CSNG(r%) k1% = SQR(11000 - i1% * i1% - j1% * j1%) c! = 3 * (x1% * i1% + j1% * y1% + k1% * z1%) / 10000 ccc% = 1 + clr% + INT(c!) + (RND > (c! - INT(c!))) PSET (x% + i%, y% + j%), ccc% NEXT j%, i% NEXT SAVEBMP "balls.bmp" PRINT "file saved to 'balls.bmp'" END ' '------------------------------------------------------------------ SUB SAVEBMP (BMPFileName$) DIM FileHeader AS BMPFileHeader DIM InfoHeader AS BMPInfoHeader ' BITMAPFILEHEADER FileHeader.FileType = "BM"'BMP format marker FileHeader.Size = 640& * 480 \\ 2 + 118 FileHeader.OffBits = 118 InfoHeader.Size = 40 InfoHeader.ImageWidth = 640 InfoHeader.ImageHeight = 480 InfoHeader.Planes = 1 InfoHeader.BitCount = 4 InfoHeader.SizeImage = 640& * 480 \\ 2' Image size in bytes InfoHeader.ClrUsed = 16' Colors used in picture InfoHeader.ClrImportant = 16' Important colors in picture OPEN BMPFileName$ FOR BINARY AS #1 PUT #1, , FileHeader PUT #1, , InfoHeader 'Save palette data Buffer$ = SPACE$(64) FOR i% = 0 TO 15 OUT &H3C7, i% Red% = INP(&H3C9) Green% = INP(&H3C9) blue% = INP(&H3C9) MID$(Buffer$, 4 * i% + 1) = CHR$(blue% * 4) + CHR$(Green% * 4) + CHR$(Red% * 4) + CHR$(0) NEXT i% PUT #1, , Buffer$ 'Save image data-use poke for speed Buffer$ = SPACE$(320*48) DEF SEG = VARSEG(Buffer$) FOR k%=9 TO 0 STEP -1 offs& = SADD(Buffer$) FOR i% = 48*(k%+1)-1 TO 48*k% STEP -1 FOR j% = 0 TO 639 STEP 2 POKE offs&, 16 * POINT(j%, i%) + POINT(j% + 1, i%) offs& = offs& + 1 NEXT j%,i% PUT #1, , Buffer$ NEXT k% CLOSE #1 END SUB