The '''POINT''' function returns the pixel [[COLOR]] attribute at a specified graphics coordinate or the current graphic cursor position.


== ''Color'' Syntax ==
::::color_attribute% = '''POINT ('''''column%, row%''''')'''


== ''Graphic cursor position'' Syntax ==
::::pointer_coordinate% = '''POINT('''{0|1|2|3}''')'''


{{PageParameters}}

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:
** POINT(0) returns the current graphic cursor [[SCREEN]] column pixel coordinate.
** POINT(1) returns the current graphic cursor [[SCREEN]] row pixel coordinate.
** POINT(2) returns the current graphic cursor [[WINDOW]] column position.
** POINT(3) returns the current graphic cursor [[WINDOW]] row position.
* 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.
:: '''{{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.


&lt;center>'''POINT in QBasic Legacy Graphic SCREEN Modes:'''&lt;/center>
* 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) &lt;> -1 THEN...
* In QBasic the coordinates MUST be on the screen or an [[ERROR Codes|Illegal Function Call error]] will occur. 


&lt;center>'''POINT in QB64 32 Bit Graphic [[_NEWIMAGE]] or [[_LOADIMAGE]] Modes:'''&lt;/center>
* 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 &amp;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.
{{CodeStart}} '' ''
{{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|CLS}} , {{Cl|_RGB}}(255, 255, 255)  'makes the background opaque white

{{Cl|PRINT}} "POINT(100, 100) ="; {{Cl|POINT}}(100, 100)
clr = {{Cl|POINT}}(100, 100)
{{Cl|PRINT}} "Variable clr = ";  clr
{{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) = clr {{Cl|THEN}} {{Cl|PRINT}} "Type OK" 'will not print with a LONG variable type'' ''
{{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:
{{OutputStart}}POINT(100, 100) = 4294967295
Variable clr = -1
Long OK
_RGB OK
{{OutputEnd}}



''Example 2:'' Using a POINT mouse routine to get the 32 bit color values of an image.
{{CodeStart}} '' ''
{{Cl|SCREEN}} {{Cl|_NEWIMAGE}}(640, 480, 32)
{{Cl|_TITLE}} "Mouse {{Cl|POINT}}er 32"


'{{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
i&amp; = {{Cl|_LOADIMAGE}}(image$, 32)
{{Cl|IF...THEN|IF}} i&amp; >= -1 {{Cl|THEN}} {{Cl|BEEP}}: {{Cl|PRINT}} "Could {{Cl|NOT}} load image!": {{Cl|END}}
w&amp; = {{Cl|_WIDTH (function)|_WIDTH}}(i&amp;): h&amp; = {{Cl|_HEIGHT}}(i&amp;)

{{Cl|PRINT}} "Make background transparent?(Y\N)";
BG$ = {{Cl|UCASE$}}({{Cl|INPUT$}}(1))
{{Cl|PRINT}} BG$
{{Cl|_DELAY}} 1

'{{Cl|CLS}} 'commented to keep background alpha 0

{{Cl|IF...THEN|IF}} BG$ = "Y" {{Cl|THEN}} {{Cl|_CLEARCOLOR}} {{Cl|_RGB32}}(255, 255, 255), i&amp; 'make white Background transparent
{{Cl|_PUTIMAGE}} (320 - w&amp;, 240 - h&amp;)-((2 * w&amp;) + (320 - w&amp;), (2 * h&amp;) + (240 - h&amp;)), i&amp;, 0
{{Cl|_FREEIMAGE}} i&amp;

{{Cl|_MOUSEMOVE}} 320, 240 'center mouse pointer on screen

{{Cl|DO...LOOP|DO}}: {{Cl|_LIMIT}} 100
  {{Cl|DO...LOOP|DO}} {{Cl|WHILE}} {{Cl|_MOUSEINPUT}}
    mx = {{Cl|_MOUSEX}}
    my = {{Cl|_MOUSEY}}
    c&amp; = {{Cl|POINT}}(mx, my)
    r = {{Cl|_RED32}}(c&amp;)
    g = {{Cl|_GREEN32}}(c&amp;)
    b = {{Cl|_BLUE32}}(c&amp;)
    a = {{Cl|_ALPHA32}}(c&amp;)
    {{Cl|LOCATE}} 1, 1: {{Cl|PRINT}} mx; my, "R:"; r, "G:"; g, "B:"; b, "A:"; a; "  "
    {{Cl|LOCATE}} 2, 2: {{Cl|PRINT}} "HTML Color: {{Cl|&amp;H}}" + {{Cl|RIGHT$}}({{Cl|HEX$}}(c&amp;), 6)
  {{Cl|LOOP}}
{{Cl|LOOP}} {{Cl|UNTIL}} {{Cl|INKEY$}} > ""
{{Cl|END}} '' ''
{{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]].


''Snippet:'' Creating an image mask to PUT an image over other colored backgrounds. See: [[GET and PUT Demo]] to run code.
{{TextStart}}
 FOR c = 0 TO 59    '60 X 60 area from 0 pixel
   FOR r = 0 TO 59
    IF {{Cb|POINT}}(c, r) = 0 THEN {{Cb|PSET}} (c, r), 15 ELSE PSET (c, r), 0
   NEXT r
 NEXT c
 {{Cb|GET (graphics statement)|GET}}(0, 0)-(60, 60), Image(1500) ' save mask in an array(indexed above original image).
{{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 {{KW|BSAVE}}d for later use. '''QB64 can also''' [[PUT]]''' a full screen 12 image from an array directly into a''' [[BINARY]] '''file.'''


''See Examples:''

* [[SAVEIMAGE]] (QB64 Image to Bitmap SUB by Galleon)

* [[Program ScreenShots]] (Member program for legacy screen modes)

* [[ThirtyTwoBit SUB]] (QB64 Image area to bitmap)

* [[ThirtyTwoBit MEM SUB]] (Fast image area to Bitmap using [[_MEM]])



''See also:'' 
* [[_NEWIMAGE]], [[_LOADIMAGE]] {{text|(see 32 bit modes)}}
* [[_MEMIMAGE]], [[_MEMGET]]
* [[PSET]], [[PRESET]]
* [[SCREEN]], [[SCREEN (function)]] {{text|(text pointer function)}}
* [[GET (graphics statement)]], [[PUT (graphics statement)]]
* [[Bitmaps]], [[Creating Sprite Masks]], [[Text Using Graphics]] (Demo)


{{PageNavigation}}
