Informations sur: Sauvegarde de SCREEN12 en format BMP 4bits

Publié par Antoni le 16/05/2006

Description

Sauvegarde de SCREEN12 en format BMP 4bits

Code source (langage qbasic)

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
v6 © Computaid SPRL 2005-2008 - Tous droits réservés - Hébergé par eTigris - Page générée en 0,039 s - Crédits - Stats
1 connecté