Difference between revisions of "GET (graphics statement)"

From QB64 Wiki
Jump to navigation Jump to search
imported>Clippy
m
imported>Clippy
m
Line 68: Line 68:
 
''Example 2:'' How to GET graphics from an image other than the present screen.
 
''Example 2:'' How to GET graphics from an image other than the present screen.
  
{{CodeStart}}
+
{{CodeStart}} '' ''
 +
{{Cl|DIM}} img(20 * 20 + 8) AS INTEGER  'create img array to hold image data
 +
a = {{Cl|_NEWIMAGE}}(800, 600, 13)      'image screen a emulates screen 13
  
{{Cl|DIM}} img(30 * 30)
+
{{Cl|SCREEN (statement)|SCREEN}} 13     'program screen 13
a = {{Cl|_NEWIMAGE}}(800, 600, 13)
 
  
{{Cl|SCREEN (statement)|SCREEN}} 13
+
{{Cl|_DEST}} a                          'set desination as the image page a
 +
{{Cl|CIRCLE}} (700, 300), 10, 10        'draw green circle on image page
  
{{Cl|_DEST}} a
+
{{Cl|_SOURCE}} a                       'set source as image page a
{{Cl|CIRCLE}} (700, 300), 10
 
 
 
{{Cl|_SOURCE}} a
 
 
{{Cl|GET}} (690, 290)-(710, 310), img()
 
{{Cl|GET}} (690, 290)-(710, 310), img()
  
  
{{Cl|_DEST}} 0
+
{{Cl|_DEST}} 0                         'set destination as the program screen
{{Cl|PUT}} (100, 100), img()
+
{{Cl|PUT}} (100, 100), img() '' ''
 
 
 
{{CodeEnd}}
 
{{CodeEnd}}
  

Revision as of 19:10, 24 April 2011

The GET statement is used in graphics to store a box area image of the screen into an INTEGER array.


Qbasic Syntax: GET (column1, row1)-(column2, row2), Array([index])


QB64 Syntax: GET (column1, row1)-(column2, row2), Array([index][, offscreen_color]


Description

  • A graphic screen mode MUST be used! See the SCREEN statement for graphic screen dimensions.
  • Column and row coordinates must be on the screen except when using the QB64 syntax.
  • QB64 GET statements can use coordinates off of the screen when an off screen color is designated.
  • The off screen color coordinate pixels will be returned as that color.
  • The GET box coordinates are set just like a LINE box statement is placed. You can use a box to find the correct GET area.
  • INTEGER Array sizes must be large enough (use width * height of the box area + 100) to hold the data or an error will occur!
  • To GET more than one image to the same array, designate a unique indexed array area.
  • RGB color settings can be embedded(indexed) at the beginning of the array for custom colors.
  • SCREEN 12 can only GET 1/3 of a fullscreen image (this might not apply for QB64). Rows would increment 160 for each GET. Once GET has placed the pixel image data in the array, BSAVE it in a loop for SCREEN 12.
  • Once the image is stored in an array PUT can be used to place the image on the screen.
  • In QB64, _PUTIMAGE is recommended over PUT as it can also do the GET part for you without an array.
  • You can use _SOURCE to set the source image you want to GET graphics from other than the current screen.
  • To get the needed size of the array you want to put the graphics in, use this formula: size = 4 + (x2 - x1) + (x2 - x1) * (y2 - y1)


Example 1: How to use GET and PUT to move a sprite with the arrow keys.

DEFINT A-Z DIM BG(300), Box(300), SC(127) ' BG holds background images. Box holds the Box image. SCREEN 13 ' graphic coordinate minimums are 0 to 319 column or 199 row maximums. ' set up screen background COLOR 4: LOCATE 10, 5: PRINT "Multikey Keyboard input routine" COLOR 10: LOCATE 12, 4: PRINT "Use the arrow keys to move the box." LOCATE 13, 4: PRINT "Note that you can press two or more" LOCATE 14, 4: PRINT "keys at once for diagonal movement!" COLOR 14: LOCATE 16, 4: PRINT " Also demonstrates how GET and PUT " LOCATE 17, 4: PRINT "are used to preserve the background." COLOR 11: LOCATE 20, 11: PRINT "Press [Esc] to quit" x = 150: y = 50: PX = x: PY = y ' actual box starting position GET (x, y)-(x + 15, y + 15), BG ' GET original BG at start box position LINE (x, y)-(x + 15, y + 15), 9, BF ' the plain blue box to move GET (x, y)-(x + 15, y + 15), Box ' GET to Box Array DO 'main loop t! = TIMER + .05 DO ' 1 Tick (1/18th second) keypress scancode read loop a$ = INKEY$ ' So the keyboard buffer won't get full code% = INP(&H60) ' Get keyboard scan code from port 96 IF code% < 128 THEN SC(code%) = 1 ELSE SC(code% - 128) = 0 'true/false values to array LOOP UNTIL TIMER > t!' loop until one tick has passed PX = x: PY = y ' previous coordinates IF SC(75) = 1 THEN x = x - 5: IF x < 0 THEN x = 0 IF SC(77) = 1 THEN x = x + 5: IF x > 304 THEN x = 304 IF SC(72) = 1 THEN y = y - 5: IF y < 0 THEN y = 0 IF SC(80) = 1 THEN y = y + 5: IF y > 184 THEN y = 184 IF x <> PX OR y <> PY THEN ' look for a changed coordinate value WAIT 936, 8: PUT(PX, PY), BG, PSET ' replace previous BG first GET (x, y)-(x + 15, y + 15), BG ' GET BG at new position before box is set PUT(x, y), Box, PSET ' PUT box image at new position END IF LOOP UNTIL SC(1) = 1 ' main loop until [Esc] key (scan code 1) is pressed


Example 2: How to GET graphics from an image other than the present screen.

DIM img(20 * 20 + 8) AS INTEGER 'create img array to hold image data a = _NEWIMAGE(800, 600, 13) 'image screen a emulates screen 13 SCREEN 13 'program screen 13 _DEST a 'set desination as the image page a CIRCLE (700, 300), 10, 10 'draw green circle on image page _SOURCE a 'set source as image page a GET (690, 290)-(710, 310), img() _DEST 0 'set destination as the program screen PUT (100, 100), img()


See also




Navigation:
Keyword Reference - Alphabetical
Keyword Reference - By Usage
Main Wiki Page