POINT: Difference between revisions
Jump to navigation
Jump to search
POINT in QBasic Legacy Graphic SCREEN Modes:
POINT in QB64 32 Bit Graphic _NEWIMAGE or _LOADIMAGE Modes:
Code by Ted Weissgerber
Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link
(Created page with "The '''POINT''' function returns the pixel COLOR attribute at a specified graphics coordinate or the current graphic cursor position. ''Color'' {{PageSyntax}} ::::color_attribute% = '''POINT ('''''column%, row%''''')''' ''Graphic cursor position'' {{PageSyntax}} ::::pointer_coordinate% = '''POINT('''{0|1|2|3}''')''' {{Parameters}} Graphic Color syntax: * The INTEGER ''column'' and ''row'' coordinates designate the pixel position color on the screen to re...") |
No edit summary |
||
(13 intermediate revisions by 2 users not shown) | |||
Line 2: | Line 2: | ||
{{PageSyntax}} | |||
;Graphic Color:color_attribute% = '''POINT ('''''column%, row%''''')''' | |||
;Graphic cursor position:pointer_coordinate% = '''POINT('''{0|1|2|3}''')''' | |||
{{PageParameters}} | |||
'''Graphic Color syntax:''' | |||
Graphic Color syntax: | |||
* The [[INTEGER]] ''column'' and ''row'' coordinates designate the pixel position color on the screen to read. | * The [[INTEGER]] ''column'' and ''row'' coordinates designate the pixel position color on the screen to read. | ||
* The return value is an [[INTEGER]] palette attribute value or an [[_UNSIGNED]] [[LONG]] [[_RGBA]] 32 bit value in QB64. | * The return value is an [[INTEGER]] palette attribute value or an [[_UNSIGNED]] [[LONG]] [[_RGBA]] 32 bit value in QB64. | ||
'''Graphic cursor position syntax:''' | |||
Graphic cursor position syntax: | |||
* The [[INTEGER]] position number can be 0 to 3 depending on the cursor position desired: | * The [[INTEGER]] position number can be 0 to 3 depending on the cursor position desired: | ||
** POINT(0) returns the current graphic cursor [[SCREEN]] column pixel coordinate. | ** POINT(0) returns the current graphic cursor [[SCREEN]] column pixel coordinate. | ||
Line 32: | Line 25: | ||
''Usage:'' | ''Usage:'' | ||
* Use '''[[_SOURCE]]''' first to set the image handle that POINT should read or QB64 will assume the current source image. | * Use '''[[_SOURCE]]''' first to set the image handle that POINT should read or QB64 will assume the current source image. | ||
:: '''{{ | :: '''{{Text|_SOURCE 0|green}}''' 'sets POINT to read the current SCREEN image after reading a previous source image | ||
* '''POINT cannot be used in SCREEN 0!''' Use the [[SCREEN (function)|SCREEN]] function to point text character codes and colors in SCREEN 0. | * '''POINT cannot be used in SCREEN 0!''' Use the [[SCREEN (function)|SCREEN]] function to point text character codes and colors in SCREEN 0. | ||
<center>'''POINT in | <center>'''POINT in QBasic Legacy Graphic SCREEN Modes:'''</center> | ||
* The [[INTEGER]] color attributes returned are limited by the number of colors in the legacy SCREEN mode used. | * The [[INTEGER]] color attributes returned are limited by the number of colors in the legacy SCREEN mode used. | ||
* ''Column'' and ''row'' [[INTEGER]] parameters denote the graphic pixel coordinate to read. | * ''Column'' and ''row'' [[INTEGER]] parameters denote the graphic pixel coordinate to read. | ||
* In '''QB64''' the offscreen or off image value returned is -1. Use IF POINT(x, y) <> -1 THEN... | * In '''QB64''' the offscreen or off image value returned is -1. Use IF POINT(x, y) <> -1 THEN... | ||
* In | * In QBasic the coordinates MUST be on the screen or an [[ERROR Codes|Illegal Function Call error]] will occur. | ||
Line 52: | Line 45: | ||
''Example 1:'' How [[_RGB]] 32 bit values return [[DOUBLE]] or [[_UNSIGNED]] [[LONG]] values in QB64. | ''Example 1:'' How [[_RGB]] 32 bit values return [[DOUBLE]] or [[_UNSIGNED]] [[LONG]] values in QB64. | ||
{{CodeStart}} | {{CodeStart}} | ||
{{Cl|DIM}} clr {{Cl|AS}} {{Cl|LONG}} 'DO NOT use LONG in older versions of QB64 (V .936 down) | {{Cl|DIM}} clr {{Cl|AS}} {{Cl|LONG}} 'DO NOT use LONG in older versions of QB64 (V .936 down) | ||
{{Cl|SCREEN}} {{Cl|_NEWIMAGE}}(640, 480, 32) | {{Cl|SCREEN}} {{Cl|_NEWIMAGE}}(640, 480, 32) | ||
Line 62: | Line 55: | ||
{{Cl|IF...THEN|IF}} clr = {{Cl|_RGB}}(255, 255, 255) {{Cl|THEN}} {{Cl|PRINT}} "Long OK" | {{Cl|IF...THEN|IF}} clr = {{Cl|_RGB}}(255, 255, 255) {{Cl|THEN}} {{Cl|PRINT}} "Long OK" | ||
{{Cl|IF...THEN|IF}} {{Cl|POINT}}(100, 100) = {{Cl|_RGB}}(255, 255, 255) {{Cl|THEN}} {{Cl|PRINT}} "_RGB OK" | {{Cl|IF...THEN|IF}} {{Cl|POINT}}(100, 100) = {{Cl|_RGB}}(255, 255, 255) {{Cl|THEN}} {{Cl|PRINT}} "_RGB OK" | ||
{{Cl|IF...THEN|IF}} {{Cl|POINT}}(100, 100) = clr {{Cl|THEN}} {{Cl|PRINT}} "Type OK" 'will not print with a LONG variable type | {{Cl|IF...THEN|IF}} {{Cl|POINT}}(100, 100) = clr {{Cl|THEN}} {{Cl|PRINT}} "Type OK" 'will not print with a LONG variable type | ||
{{CodeEnd}} | {{CodeEnd}} | ||
:'''Note:''' Change the DIM ''clr'' variable type to [[LONG]] to see how the last IF statement doesn't PRINT as shown in the output below: | :'''Note:''' Change the [[DIM]] ''clr'' variable type to [[LONG]] to see how the last [[IF]] statement doesn't [[PRINT]] as shown in the output below: | ||
{{OutputStart}}POINT(100, 100) = 4294967295 | {{OutputStart}}POINT(100, 100) = 4294967295 | ||
Variable clr = -1 | Variable clr = -1 | ||
Line 73: | Line 66: | ||
''Example 2:'' Using a POINT mouse routine to get the 32 bit color values of the | ''Example 2:'' Using a [[POINT]] mouse routine to get the 32 bit color values of the image. | ||
{{CodeStart}} | {{CodeStart}} | ||
{{Cl|SCREEN}} {{Cl|_NEWIMAGE}}(640, 480, 32) | {{Cl|SCREEN}} {{Cl|_NEWIMAGE}}(640, 480, 32) | ||
{{Cl|_TITLE}} "Mouse {{Cl|POINT}}er 32" | {{Cl|_TITLE}} "Mouse {{Cl|POINT}}er 32" | ||
Line 80: | Line 73: | ||
'{{Cl|LINE INPUT}} "Enter an image file: ", image$ 'use quotes around file names with spaces | '{{Cl|LINE INPUT}} "Enter an image file: ", image$ 'use quotes around file names with spaces | ||
image$ = "QB64bee.png" 'up to 320 X 240 with current {{Cl|_PUTIMAGE}} settings | image$ = "QB64bee.png" 'any 24/32 bit image up to 320 X 240 with current {{Cl|_PUTIMAGE}} settings | ||
i& = {{Cl|_LOADIMAGE}}(image$, 32) | i& = {{Cl|_LOADIMAGE}}(image$, 32) | ||
{{Cl|IF...THEN|IF}} i& >= -1 {{Cl|THEN}} {{Cl|BEEP}}: {{Cl|PRINT}} "Could {{Cl|NOT}} load image!": {{Cl|END}} | {{Cl|IF...THEN|IF}} i& >= -1 {{Cl|THEN}} {{Cl|BEEP}}: {{Cl|PRINT}} "Could {{Cl|NOT}} load image!": {{Cl|END}} | ||
Line 111: | Line 104: | ||
{{Cl|LOOP}} | {{Cl|LOOP}} | ||
{{Cl|LOOP}} {{Cl|UNTIL}} {{Cl|INKEY$}} > "" | {{Cl|LOOP}} {{Cl|UNTIL}} {{Cl|INKEY$}} > "" | ||
{{Cl|END}} | {{Cl|END}} | ||
{{CodeEnd}} | {{CodeEnd}} | ||
{{ | {{Small|Code by Ted Weissgerber}} | ||
:''Explanation:'' Use the mouse pointer to get the background RGB of the image to make it transparent with [[_CLEARCOLOR]]. | :''Explanation:'' Use the mouse pointer to get the background RGB of the image to make it transparent with [[_CLEARCOLOR]]. | ||
Line 127: | Line 120: | ||
{{CodeEnd}} | {{CodeEnd}} | ||
:''Explanation:'' In the procedure all black areas(background) are changed to white for a PUT using AND over other colored objects. The other image colors are changed to black for a PUT of the original image using XOR. The array images can be | :''Explanation:'' In the procedure all black areas(background) are changed to white for a PUT using AND over other colored objects. The other image colors are changed to black for a PUT of the original image using XOR. The array images can be [[BSAVE]]d for later use. '''QB64 can also''' [[PUT]]''' a full screen 12 image from an array directly into a''' [[BINARY]] '''file.''' | ||
=== More Examples === | |||
* [[SaveImage SUB]] | |||
* [[Program ScreenShots]] | |||
* [[ThirtyTwoBit SUB]] | |||
* [[ThirtyTwoBit MEM SUB]] | |||
{{PageSeeAlso}} | |||
* [[_NEWIMAGE]], [[_LOADIMAGE]] | * [[_NEWIMAGE]], [[_LOADIMAGE]] | ||
* [[_MEMIMAGE]], [[_MEMGET]] | * [[_MEMIMAGE]], [[_MEMGET]] | ||
* [[PSET]], [[PRESET]] | * [[PSET]], [[PRESET]] | ||
* [[SCREEN]], [[SCREEN (function)]] | * [[SCREEN]], [[SCREEN (function)]] | ||
* [[GET (graphics statement)]], [[PUT (graphics statement)]] | * [[GET (graphics statement)]], [[PUT (graphics statement)]] | ||
* [[Bitmaps]], [[Creating Sprite Masks]], [[Text Using Graphics] | * [[Bitmaps]], [[Creating Sprite Masks]], [[Text Using Graphics]] | ||
{{PageNavigation}} | {{PageNavigation}} |
Latest revision as of 20:03, 5 January 2024
The POINT function returns the pixel COLOR attribute at a specified graphics coordinate or the current graphic cursor position.
Syntax
- Graphic Color
- color_attribute% = POINT (column%, row%)
- Graphic cursor position
- pointer_coordinate% = POINT({0|1|2|3})
Parameters
Graphic Color syntax:
- The INTEGER column and row coordinates designate the pixel position color on the screen to read.
- The return value is an INTEGER palette attribute value or an _UNSIGNED LONG _RGBA 32 bit value in QB64.
Graphic cursor position syntax:
- The INTEGER position number can be 0 to 3 depending on the cursor position desired:
- If a WINDOW view port has not been established, the coordinate returned will be the SCREEN cursor pixel position.
- The return value is the current graphic cursor column or row pixel position on the SCREEN or WINDOW.
- Graphic cursor positions returned will be the last ones used in a graphic shape such as a CIRCLE center point.
Usage:
- Use _SOURCE first to set the image handle that POINT should read or QB64 will assume the current source image.
- _SOURCE 0 'sets POINT to read the current SCREEN image after reading a previous source image
- POINT cannot be used in SCREEN 0! Use the SCREEN function to point text character codes and colors in SCREEN 0.
- The INTEGER color attributes returned are limited by the number of colors in the legacy SCREEN mode used.
- Column and row INTEGER parameters denote the graphic pixel coordinate to read.
- In QB64 the offscreen or off image value returned is -1. Use IF POINT(x, y) <> -1 THEN...
- In QBasic the coordinates MUST be on the screen or an Illegal Function Call error will occur.
- Returns _UNSIGNED LONG 32 bit color values. Use _UNSIGNED values when you don't want negative values.
- _UNSIGNED LONG variables should be used when comparing POINT returns with _RGB or _RGB32 _ALPHA bit values
- Convert 32 bit color values to RGB intensities(0 to 255) using the _RED32, _GREEN32 and _BLUE32 functions.
- To convert color intensities to OUT &H3C9 color port palette intensity values divide the values of 0 to 255 by 4.
- Use the _PALETTECOLOR (function) to convert color port palette intensities in 32 bit modes.
Example 1: How _RGB 32 bit values return DOUBLE or _UNSIGNED LONG values in QB64.
DIM clr AS LONG 'DO NOT use LONG in older versions of QB64 (V .936 down) SCREEN _NEWIMAGE(640, 480, 32) CLS , _RGB(255, 255, 255) 'makes the background opaque white PRINT "POINT(100, 100) ="; POINT(100, 100) clr = POINT(100, 100) PRINT "Variable clr = "; clr IF clr = _RGB(255, 255, 255) THEN PRINT "Long OK" IF POINT(100, 100) = _RGB(255, 255, 255) THEN PRINT "_RGB OK" IF POINT(100, 100) = clr THEN PRINT "Type OK" 'will not print with a LONG variable type |
- Note: Change the DIM clr variable type to LONG to see how the last IF statement doesn't PRINT as shown in the output below:
POINT(100, 100) = 4294967295 Variable clr = -1 Long OK _RGB OK |
Example 2: Using a POINT mouse routine to get the 32 bit color values of the image.
SCREEN _NEWIMAGE(640, 480, 32) _TITLE "Mouse POINTer 32" 'LINE INPUT "Enter an image file: ", image$ 'use quotes around file names with spaces image$ = "QB64bee.png" 'any 24/32 bit image up to 320 X 240 with current _PUTIMAGE settings i& = _LOADIMAGE(image$, 32) IF i& >= -1 THEN BEEP: PRINT "Could NOT load image!": END w& = _WIDTH(i&): h& = _HEIGHT(i&) PRINT "Make background transparent?(Y\N)"; BG$ = UCASE$(INPUT$(1)) PRINT BG$ _DELAY 1 'CLS 'commented to keep background alpha 0 IF BG$ = "Y" THEN _CLEARCOLOR _RGB32(255, 255, 255), i& 'make white Background transparent _PUTIMAGE (320 - w&, 240 - h&)-((2 * w&) + (320 - w&), (2 * h&) + (240 - h&)), i&, 0 _FREEIMAGE i& _MOUSEMOVE 320, 240 'center mouse pointer on screen DO: _LIMIT 100 DO WHILE _MOUSEINPUT mx = _MOUSEX my = _MOUSEY c& = POINT(mx, my) r = _RED32(c&) g = _GREEN32(c&) b = _BLUE32(c&) a = _ALPHA32(c&) LOCATE 1, 1: PRINT mx; my, "R:"; r, "G:"; g, "B:"; b, "A:"; a; " " LOCATE 2, 2: PRINT "HTML Color: &H" + RIGHT$(HEX$(c&), 6) LOOP LOOP UNTIL INKEY$ > "" END |
- Explanation: Use the mouse pointer to get the background RGB of the image to make it transparent with _CLEARCOLOR.
Snippet: Creating an image mask to PUT an image over other colored backgrounds. See: GET and PUT Demo to run code.
FOR c = 0 TO 59 '60 X 60 area from 0 pixel FOR r = 0 TO 59 IF POINT(c, r) = 0 THEN PSET (c, r), 15 ELSE PSET (c, r), 0 NEXT r NEXT c GET(0, 0)-(60, 60), Image(1500) ' save mask in an array(indexed above original image). |
- Explanation: In the procedure all black areas(background) are changed to white for a PUT using AND over other colored objects. The other image colors are changed to black for a PUT of the original image using XOR. The array images can be BSAVEd for later use. QB64 can also PUT a full screen 12 image from an array directly into a BINARY file.
More Examples
See also
- _NEWIMAGE, _LOADIMAGE
- _MEMIMAGE, _MEMGET
- PSET, PRESET
- SCREEN, SCREEN (function)
- GET (graphics statement), PUT (graphics statement)
- Bitmaps, Creating Sprite Masks, Text Using Graphics