POINT: Difference between revisions

From QB64 Phoenix Edition Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 25: 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
:: '''{{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.


Line 106: Line 106:
{{Cl|END}}
{{Cl|END}}
{{CodeEnd}}
{{CodeEnd}}
{{small|Code by Ted Weissgerber}}
{{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 123: Line 123:


=== More Examples ===
=== More Examples ===
* [[SAVEIMAGE]]
* [[SaveImage SUB]]
* [[Program ScreenShots]]
* [[Program ScreenShots]]
* [[ThirtyTwoBit SUB]]
* [[ThirtyTwoBit SUB]]
Line 130: Line 130:


{{PageSeeAlso}}
{{PageSeeAlso}}
* [[_NEWIMAGE]], [[_LOADIMAGE]] {{text|(see 32 bit modes)}}
* [[_NEWIMAGE]], [[_LOADIMAGE]]
* [[_MEMIMAGE]], [[_MEMGET]]
* [[_MEMIMAGE]], [[_MEMGET]]
* [[PSET]], [[PRESET]]
* [[PSET]], [[PRESET]]
* [[SCREEN]], [[SCREEN (function)]] {{text|(text pointer function)}}
* [[SCREEN]], [[SCREEN (function)]]
* [[GET (graphics statement)]], [[PUT (graphics statement)]]
* [[GET (graphics statement)]], [[PUT (graphics statement)]]
* [[Bitmaps]], [[Creating Sprite Masks]], [[Text Using Graphics]] (Demo)
* [[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:
    • 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.
_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.


POINT in QBasic Legacy Graphic SCREEN Modes:
  • 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.


POINT in QB64 32 Bit Graphic _NEWIMAGE or _LOADIMAGE Modes:
  • 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
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.

 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



Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link