CLEARCOLOR: Difference between revisions

From QB64 Phoenix Edition Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
(One intermediate revision by the same user not shown)
Line 25: Line 25:
''Example 1:'' Using _CLEARCOLOR to "mask" the background color of an image.
''Example 1:'' Using _CLEARCOLOR to "mask" the background color of an image.
{{CodeStart}}
{{CodeStart}}
{{Cl|SCREEN}} 13
{{Cl|SCREEN}} {{Text|13|#F580B1}}
img& = {{Cl|_LOADIMAGE}}("qb64_trans.png")
img& = {{Cl|_LOADIMAGE}}({{Text|<nowiki>"qb64_trans.png"</nowiki>|#FFB100}})
{{Cl|_PUTIMAGE}} , img&, 0               'place actual image with background
{{Cl|_PUTIMAGE}} , img&, {{Text|0|#F580B1}} {{Text|<nowiki>'place actual image with background</nowiki>|#919191}}
K$ = INPUT$(1)
K$ = {{Cl|INPUT$}}({{Text|1|#F580B1}})
{{Cl|CLS}} , {{Cl|_RGB}}(255, 0, 0)             'clear screen with red background
{{Cl|CLS}} , {{Cl|_RGB}}({{Text|255|#F580B1}}, {{Text|0|#F580B1}}, {{Text|0|#F580B1}}) {{Text|<nowiki>'clear screen with red background</nowiki>|#919191}}
{{Cl|_CLEARCOLOR}} {{Cl|_RGB}}(255, 255, 255), img&
{{Cl|_CLEARCOLOR}} {{Cl|_RGB}}({{Text|255|#F580B1}}, {{Text|255|#F580B1}}, {{Text|255|#F580B1}}), img&
{{Cl|_PUTIMAGE}} , img&, 0               'place image without white background
{{Cl|_PUTIMAGE}} , img&, {{Text|0|#F580B1}} {{Text|<nowiki>'place image without white background</nowiki>|#919191}}
{{Cl|PRINT}} {{Cl|_CLEARCOLOR}}(img&)           'displays closest clear color attribute
{{Cl|PRINT}} {{Cl|_CLEARCOLOR (function)|_CLEARCOLOR}}(img&) {{Text|<nowiki>'displays closest clear color attribute</nowiki>|#919191}}
{{Cl|END}}
{{Cl|END}}
{{CodeEnd}}
{{CodeEnd}}


----


''Example 2:'' Using a _CLEARCOLOR transparency with images created on a [[_NEWIMAGE]] page. Does not require an image file.
''Example 2:'' Using a _CLEARCOLOR transparency with images created on a [[_NEWIMAGE]] page. Does not require an image file.
{{CodeStart}}{{Cl|SCREEN}} {{Cl|_NEWIMAGE}}(512, 384, 32) ' screen uses handle value
{{CodeStart}}
{{Cl|CIRCLE}}(50, 50), 50, {{Cl|_RGB}}(128, 0, 0) ' create a red ball image
{{Cl|SCREEN}} {{Cl|_NEWIMAGE}}({{Text|512|#F580B1}}, {{Text|384|#F580B1}}, {{Text|32|#F580B1}}) {{Text|<nowiki>' screen uses handle value</nowiki>|#919191}}
{{Cl|PAINT}}(50, 50), {{Cl|_RGB}}(255, 0, 0), {{Cl|_RGB}}(128, 0, 0)
{{Cl|CIRCLE}} ({{Text|50|#F580B1}}, {{Text|50|#F580B1}}), {{Text|50|#F580B1}}, {{Cl|_RGB}}({{Text|128|#F580B1}}, {{Text|0|#F580B1}}, {{Text|0|#F580B1}}) {{Text|<nowiki>' create a red ball image</nowiki>|#919191}}
redball = {{Cl|_NEWIMAGE}}(101, 101, 32) ' create a new image page
{{Cl|PAINT}} ({{Text|50|#F580B1}}, {{Text|50|#F580B1}}), {{Cl|_RGB}}({{Text|255|#F580B1}}, {{Text|0|#F580B1}}, {{Text|0|#F580B1}}), {{Cl|_RGB}}({{Text|128|#F580B1}}, {{Text|0|#F580B1}}, {{Text|0|#F580B1}})
{{Cl|_PUTIMAGE}} , 0, redball,(0, 0)-(101, 101) ' put screen page 0 image onto redball page
redball = {{Cl|_NEWIMAGE}}({{Text|101|#F580B1}}, {{Text|101|#F580B1}}, {{Text|32|#F580B1}}) {{Text|<nowiki>' create a new image page</nowiki>|#919191}}
{{Cl|_CLEARCOLOR}} {{Cl|_RGB}}(0, 0, 0), redball ' makes black become see-through
{{Cl|_PUTIMAGE}} , {{Text|0|#F580B1}}, redball, ({{Text|0|#F580B1}}, {{Text|0|#F580B1}})-({{Text|101|#F580B1}}, {{Text|101|#F580B1}}) {{Text|<nowiki>' put screen page 0 image onto redball page</nowiki>|#919191}}
{{Cl|CLS}}, {{Cl|_RGB}}(0, 0, 255) ' erase original ball and create a blue background
{{Cl|_CLEARCOLOR}} {{Cl|_RGB}}({{Text|0|#F580B1}}, {{Text|0|#F580B1}}, {{Text|0|#F580B1}}), redball {{Text|<nowiki>' makes black become see-through</nowiki>|#919191}}
{{Cl|DO...LOOP|DO}}
{{Cl|CLS}} , {{Cl|_RGB}}({{Text|0|#F580B1}}, {{Text|0|#F580B1}}, {{Text|255|#F580B1}}) {{Text|<nowiki>' erase original ball and create a blue background</nowiki>|#919191}}
{{Cl|_PUTIMAGE| _PUTIMAGE}} ({{Cl|RND}} * 512, {{Cl|RND}} * 384), redball
{{Cl|DO}}
{{Cl|SLEEP| SLEEP}} 1 ' one second delay
    {{Cl|_PUTIMAGE}} ({{Cl|RND}} * {{Text|512|#F580B1}}, {{Cl|RND}} * {{Text|384|#F580B1}}), redball
{{Cl|LOOP}} {{Cl|UNTIL}} {{Cl|INKEY$}} <> ""
    {{Cl|SLEEP}} {{Text|1|#F580B1}} {{Text|<nowiki>' one second delay</nowiki>|#919191}}
{{Cl|DO...LOOP|LOOP UNTIL}} {{Cl|INKEY$}} <> {{Text|<nowiki>""</nowiki>|#FFB100}}
{{CodeEnd}}
{{CodeEnd}}


----


''Example 3:'' Fading an image with a _CLEARCOLOR background using a new page image to prevent [[_SETALPHA]] changes.
''Example 3:'' Fading an image with a _CLEARCOLOR background using a new page image to prevent [[_SETALPHA]] changes.
{{CodeStart}}
{{CodeStart}}
mainscreen = {{Cl|_NEWIMAGE}}(640, 480, 32) ' Main Screen (viewable)
mainscreen = {{Cl|_NEWIMAGE}}({{Text|640|#F580B1}}, {{Text|480|#F580B1}}, {{Text|32|#F580B1}}) {{Text|<nowiki>' Main Screen (viewable)</nowiki>|#919191}}
{{Cl|SCREEN}} mainscreen
{{Cl|SCREEN}} mainscreen
{{Cl|_SCREENMOVE}} {{Cl|_SCREENMOVE|_MIDDLE}}
{{Cl|_SCREENMOVE}} {{Cl|_MIDDLE}}
Image1& = {{Cl|_LOADIMAGE}}("qb64_trans.png") '<<<<<< any image with one background color to clear
Image1& = {{Cl|_LOADIMAGE}}({{Text|<nowiki>"qb64_trans.png"</nowiki>|#FFB100}}) {{Text|<nowiki>'<<<<<< any image with one background color to clear</nowiki>|#919191}}


{{Cl|IF...THEN|IF}} Image1& < -1 {{Cl|THEN}} 'check loaded image handle value before using!
{{Cl|IF}} Image1& < {{Text|-1|#F580B1}} {{Cl|THEN}} {{Text|<nowiki>'check loaded image handle value before using!</nowiki>|#919191}}
  {{Cl|_SOURCE}} Image1&
    {{Cl|_SOURCE}} Image1&
  clr~& = {{Cl|POINT}}(0, 0) 'get background color from image source
    clr~& = {{Cl|POINT}}({{Text|0|#F580B1}}, {{Text|0|#F580B1}}) {{Text|<nowiki>'get background color from image source</nowiki>|#919191}}
  {{Cl|_CLEARCOLOR}} clr~&, Image1& 'clear background color of loaded image
    {{Cl|_CLEARCOLOR}} clr~&, Image1& {{Text|<nowiki>'clear background color of loaded image</nowiki>|#919191}}
  NewImage1& = {{Cl|_NEWIMAGE}}({{Cl|_WIDTH (function)|_WIDTH}}(Image1&), {{Cl|_HEIGHT}}(Image1&), 32) 'new image page
    NewImage1& = {{Cl|_NEWIMAGE}}({{Cl|_WIDTH (function)|_WIDTH}}(Image1&), {{Cl|_HEIGHT}}(Image1&), {{Text|32|#F580B1}}) {{Text|<nowiki>'new image page</nowiki>|#919191}}
  {{Cl|_PUTIMAGE}} , Image1&, NewImage1& 'put image without background color on new page
    {{Cl|_PUTIMAGE}} , Image1&, NewImage1& {{Text|<nowiki>'put image without background color on new page</nowiki>|#919191}}
  {{Cl|_FREEIMAGE}} Image1& 'free loaded image from memory
    {{Cl|_FREEIMAGE}} Image1& {{Text|<nowiki>'free loaded image from memory</nowiki>|#919191}}
{{Cl|END IF}}
{{Cl|END IF}}
{{Cl|_DEST}} mainscreen:
{{Cl|_DEST}} mainscreen:


a& = 0: d = 1
a& = {{Text|0|#F580B1}}: d = {{Text|1|#F580B1}}
DO
{{Cl|DO}}
  {{Cl|_LIMIT}} 10 'regulate speed of fades
    {{Cl|_LIMIT}} {{Text|10|#F580B1}} {{Text|<nowiki>'regulate speed of fades</nowiki>|#919191}}
  {{Cl|CLS}}
    {{Cl|CLS}}
  a& = a& + d
    a& = a& + d
  {{Cl|IF...THEN|IF}} a& = 255 {{Cl|THEN}} d = -d 'reverse fade
    {{Cl|IF}} a& = {{Text|255|#F580B1}} {{Cl|THEN}} d = -d {{Text|<nowiki>'reverse fade</nowiki>|#919191}}
  {{Cl|_SETALPHA}} a&, , NewImage1& 'sets alpha level of all colors to fade image page in/out
    {{Cl|_SETALPHA}} a&, , NewImage1& {{Text|<nowiki>'sets alpha level of all colors to fade image page in/out</nowiki>|#919191}}
  {{Cl|_PUTIMAGE}} (0, 342), NewImage1&
    {{Cl|_PUTIMAGE}} ({{Text|0|#F580B1}}, {{Text|342|#F580B1}}), NewImage1&
  {{Cl|LOCATE}} 1, 1: {{Cl|PRINT}} "Alpha: "; a&
    {{Cl|LOCATE}} {{Text|1|#F580B1}}, {{Text|1|#F580B1}}: {{Cl|PRINT}} {{Text|<nowiki>"Alpha: "</nowiki>|#FFB100}}; a&
  {{Cl|_DISPLAY}}
    {{Cl|_DISPLAY}}
{{Cl|LOOP}} {{Cl|UNTIL}} a& = 0
{{Cl|DO...LOOP|LOOP UNTIL}} a& = {{Text|0|#F580B1}}
{{Cl|END}}
{{Cl|END}}
{{CodeEnd}}
{{CodeEnd}}
Line 87: Line 90:
{{PageSeeAlso}}
{{PageSeeAlso}}
* [[_CLEARCOLOR (function)]]
* [[_CLEARCOLOR (function)]]
* [[_SETALPHA]] {{text|(sets transparency level)}}
* [[_SETALPHA]] {{Text|(sets transparency level)}}
* [[_ALPHA]], [[_ALPHA32]] {{text|(read functions)}}
* [[_ALPHA]], [[_ALPHA32]] {{Text|(read functions)}}
* [[Images]], [[Creating Sprite Masks]]
* [[Images]], [[Creating Sprite Masks]]




{{PageNavigation}}
{{PageNavigation}}

Latest revision as of 14:05, 20 March 2023

The _CLEARCOLOR statement sets a specific color to be treated as transparent when an image is later put (via _PUTIMAGE) onto another image.


Syntax

_CLEARCOLOR {color&|_NONE}[, Dest_Handle&]


Parameters

  • In color modes using a palette, color& is the palette index of the new transparent color value or _NONE designates no clear colors.
  • If color& is not a valid palette index, an illegal function call error will occur.
  • In 32-bit color modes, color& is the _LONG color value of the new transparent color.
  • If Dest_Handle& is omitted, the destination is assumed to be the current write page. Zero can designate the current program screen.


Description

  • If Dest_Handle& is an invalid handle, then an invalid handle error is returned. Check for bad handle values of -1 first.
  • In 32-bit color modes, it simply sets the Alpha to 0 for all pixels matching the specified color.
  • In the second syntax, transparency is disabled for color modes using a palette.
  • Note: _SETALPHA can affect any _CLEARCOLOR alpha setting within the color range set.
  • NOTE: 32 bit _NEWIMAGE screen page backgrounds are transparent black or _ALPHA 0. Use _DONTBLEND or CLS for opaque.


Examples

Example 1: Using _CLEARCOLOR to "mask" the background color of an image.

SCREEN 13
img& = _LOADIMAGE("qb64_trans.png")
_PUTIMAGE , img&, 0 'place actual image with background
K$ = INPUT$(1)
CLS , _RGB(255, 0, 0) 'clear screen with red background
_CLEARCOLOR _RGB(255, 255, 255), img&
_PUTIMAGE , img&, 0 'place image without white background
PRINT _CLEARCOLOR(img&) 'displays closest clear color attribute
END

Example 2: Using a _CLEARCOLOR transparency with images created on a _NEWIMAGE page. Does not require an image file.

SCREEN _NEWIMAGE(512, 384, 32) ' screen uses handle value
CIRCLE (50, 50), 50, _RGB(128, 0, 0) ' create a red ball image
PAINT (50, 50), _RGB(255, 0, 0), _RGB(128, 0, 0)
redball = _NEWIMAGE(101, 101, 32) ' create a new image page
_PUTIMAGE , 0, redball, (0, 0)-(101, 101) ' put screen page 0 image onto redball page
_CLEARCOLOR _RGB(0, 0, 0), redball ' makes black become see-through
CLS , _RGB(0, 0, 255) ' erase original ball and create a blue background
DO
    _PUTIMAGE (RND * 512, RND * 384), redball
    SLEEP 1 ' one second delay
LOOP UNTIL INKEY$ <> ""

Example 3: Fading an image with a _CLEARCOLOR background using a new page image to prevent _SETALPHA changes.

mainscreen = _NEWIMAGE(640, 480, 32) ' Main Screen (viewable)
SCREEN mainscreen
_SCREENMOVE _MIDDLE
Image1& = _LOADIMAGE("qb64_trans.png") '<<<<<< any image with one background color to clear

IF Image1& < -1 THEN 'check loaded image handle value before using!
    _SOURCE Image1&
    clr~& = POINT(0, 0) 'get background color from image source
    _CLEARCOLOR clr~&, Image1& 'clear background color of loaded image
    NewImage1& = _NEWIMAGE(_WIDTH(Image1&), _HEIGHT(Image1&), 32) 'new image page
    _PUTIMAGE , Image1&, NewImage1& 'put image without background color on new page
    _FREEIMAGE Image1& 'free loaded image from memory
END IF
_DEST mainscreen:

a& = 0: d = 1
DO
    _LIMIT 10 'regulate speed of fades
    CLS
    a& = a& + d
    IF a& = 255 THEN d = -d 'reverse fade
    _SETALPHA a&, , NewImage1& 'sets alpha level of all colors to fade image page in/out
    _PUTIMAGE (0, 342), NewImage1&
    LOCATE 1, 1: PRINT "Alpha: "; a&
    _DISPLAY
LOOP UNTIL a& = 0
END
Note: If the _CLEARCOLOR image background was not put onto a separate page, _SETALPHA would display it also.


See also



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