COLOR: Difference between revisions
Jump to navigation
Jump to search
Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link
No edit summary |
No edit summary |
||
(11 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
The [[COLOR]] statement is used to change the foreground and background colors for printing text. | The [[COLOR]] statement is used to change the foreground and background colors for printing text. | ||
{{PageSyntax}} | {{PageSyntax}} | ||
Line 6: | Line 7: | ||
{{PageDescription}} | {{PageDescription}} | ||
* {{Parameter|background&}} colors are available in all QB64 color SCREEN modes. | * {{Parameter|background&}} colors are available in all QB64 color SCREEN modes. | ||
* [[SCREEN]] mode 10 has only 3 white foreground attributes including flashing. | * [[SCREEN]] mode 10 has only 3 white foreground attributes including flashing. | ||
* To change the {{Parameter|background&}} color only, use a comma and the desired color. Ex: [[COLOR]] , {{Parameter|background&}} | * To change the {{Parameter|background&}} color only, use a comma and the desired color. Ex: [[COLOR]] , {{Parameter|background&}} | ||
* Graphic drawing statements like [[PSET]], [[PRESET]], [[LINE]], etc, also use the colors set by the [[COLOR]] statement if no color is passed when they are called. | * Graphic drawing statements like [[PSET]], [[PRESET]], [[LINE]], etc, also use the colors set by the [[COLOR]] statement if no color is passed when they are called. | ||
Line 13: | Line 14: | ||
==Screen Mode Attributes== | == Screen Mode Attributes == | ||
* '''SCREEN 0''' {{Parameter|background&}} colors 0 to 7 can be changed each text character without affecting other text. Use [[CLS]] after a background color statement to create a fullscreen background color. 64 [[DAC]] hues with 16 high intensity blinking foreground (16 to 31) color attributes. See [[_BLINK]]. | * '''SCREEN 0''' {{Parameter|background&}} colors 0 to 7 can be changed each text character without affecting other text. Use [[CLS]] after a background color statement to create a fullscreen background color. 64 [[DAC]] hues with 16 high intensity blinking foreground (16 to 31) color attributes. See [[_BLINK]]. | ||
** See example 7 below for more SCREEN 0 background colors. | ** See example 7 below for more SCREEN 0 background colors. | ||
* '''SCREEN 1''' has '''4 background color attributes''': 0 = black, 1 = blue, 2 = green, 3 = grey. White foreground color only. | * '''SCREEN 1''' has '''4 background color attributes''': 0 = black, 1 = blue, 2 = green, 3 = grey. White foreground color only. | ||
* '''SCREEN 2''' is '''monochrome''' with white forecolor and black background. | * '''SCREEN 2''' is '''monochrome''' with white forecolor and black background. | ||
* '''SCREEN 7''' can use 16 ([[DAC]]) colors with background colors. RGB settings can be changed in colors 0 to 7 using [[_PALETTECOLOR]]. | * '''SCREEN 7''' can use 16 ([[DAC]]) colors with background colors. RGB settings can be changed in colors 0 to 7 using [[_PALETTECOLOR]]. | ||
* '''SCREEN 8''' has 16 color attributes with 16 background colors. | * '''SCREEN 8''' has 16 color attributes with 16 background colors. | ||
* '''SCREEN 9''' can use up to 64 [[DAC]] color hues in 16 color attributes with background colors assigned to attribute 0 with a [[_PALETTECOLOR]] swap. RGB settings can be changed in colors 0 to 5 and 7 using [[_PALETTECOLOR]]. | * '''SCREEN 9''' can use up to 64 [[DAC]] color hues in 16 color attributes with background colors assigned to attribute 0 with a [[_PALETTECOLOR]] swap. RGB settings can be changed in colors 0 to 5 and 7 using [[_PALETTECOLOR]]. | ||
* '''SCREEN 10''' has '''only 4 color attributes''' with black background. COLOR 0 = black, 1 = grey, 2 = flash white and 3 = bright white. | * '''SCREEN 10''' has '''only 4 color attributes''' with black background. COLOR 0 = black, 1 = grey, 2 = flash white and 3 = bright white. | ||
Line 29: | Line 30: | ||
* [[_DEFAULTCOLOR]] returns the current color being used on an image or screen page handle. | * [[_DEFAULTCOLOR]] returns the current color being used on an image or screen page handle. | ||
=== 24/32-Bit colors using QB64 === | |||
===24/32-Bit colors using QB64=== | |||
* Pixel color intensities for red, green, blue and alpha range from 0 to 255 when used with [[_RGB]], [[_RGBA]], [[_RGB32]] and [[RGBA32]]. | * Pixel color intensities for red, green, blue and alpha range from 0 to 255 when used with [[_RGB]], [[_RGBA]], [[_RGB32]] and [[RGBA32]]. | ||
* Combined RGB function values returned are [[LONG]] values. '''Blue intensity values may be cut off using [[SINGLE]] variables.''' | * Combined RGB function values returned are [[LONG]] values. '''Blue intensity values may be cut off using [[SINGLE]] variables.''' | ||
* [[_ALPHA]] transparency values can range from 0 as transparent up to 255 which is fully opaque. | * [[_ALPHA]] transparency values can range from 0 as transparent up to 255 which is fully opaque. | ||
* [[_CLEARCOLOR]] can also be used to set a color as transparent. | * [[_CLEARCOLOR]] can also be used to set a color as transparent. | ||
* Colors can be mixed by using [[_BLEND]] (default) in 32-bit screen modes. [[_DONTBLEND]] disables blending. | * Colors can be mixed by using [[_BLEND]] (default) in 32-bit screen modes. [[_DONTBLEND]] disables blending. | ||
Line 40: | Line 40: | ||
<p style="text-align: center">([[#toc|Return to Table of Contents]])</p> | <p style="text-align: center">([[#toc|Return to Table of Contents]])</p> | ||
==RGB Palette Intensities== | |||
== RGB Palette Intensities == | |||
RGB intensity values can be converted to hexadecimal values to create the [[LONG]] [[_PALETTECOLOR]] value in non-32-bit screens: | RGB intensity values can be converted to hexadecimal values to create the [[LONG]] [[_PALETTECOLOR]] value in non-32-bit screens: | ||
{{CodeStart}} | {{CodeStart}} | ||
{{Cl|SCREEN}} 12 | {{Cl|SCREEN}} 12 | ||
alpha$ = "FF" 'solid alpha colors only | alpha$ = "FF" 'solid alpha colors only | ||
{{Cl|PRINT}} "Attribute = Hex value Red Green Blue " | {{Cl|PRINT}} "Attribute = Hex value Red Green Blue " | ||
{{Cl|PRINT}} | {{Cl|PRINT}} | ||
{{Cl|COLOR}} 7 | {{Cl|COLOR}} 7 | ||
{{Cl|FOR...NEXT|FOR}} attribute = 1 {{Cl|TO}} 15 | {{Cl|FOR...NEXT|FOR}} attribute = 1 {{Cl|TO}} 15 | ||
{{Cl|OUT}} {{Cl|&H}}3C7, attribute 'set color attribute to read | {{Cl|OUT}} {{Cl|&H}}3C7, attribute 'set color attribute to read | ||
red$ = {{Cl|HEX$}}({{Cl|INP}}({{Cl|&H}}3C9) * | red$ = {{Cl|HEX$}}({{Cl|INP}}({{Cl|&H}}3C9) * 255 / 63) 'convert port setting to 32 bit values | ||
grn$ = {{Cl|HEX$}}({{Cl|INP}}({{Cl|&H}}3C9) * | grn$ = {{Cl|HEX$}}({{Cl|INP}}({{Cl|&H}}3C9) * 255 / 63) | ||
blu$ = {{Cl|HEX$}}({{Cl|INP}}({{Cl|&H}}3C9) * | blu$ = {{Cl|HEX$}}({{Cl|INP}}({{Cl|&H}}3C9) * 255 / 63) | ||
{{Cl|IF...THEN|IF}} {{Cl|LEN}}(red$) = 1 {{Cl|THEN}} red$ = "0" + red$ '2 hex digits required | {{Cl|IF...THEN|IF}} {{Cl|LEN}}(red$) = 1 {{Cl|THEN}} red$ = "0" + red$ '2 hex digits required | ||
{{Cl|IF...THEN|IF}} {{Cl|LEN}}(grn$) = 1 {{Cl|THEN}} grn$ = "0" + grn$ 'for low or zero hex values | {{Cl|IF...THEN|IF}} {{Cl|LEN}}(grn$) = 1 {{Cl|THEN}} grn$ = "0" + grn$ 'for low or zero hex values | ||
Line 60: | Line 61: | ||
{{Cl|IF...THEN|IF}} attribute {{Cl|THEN}} {{Cl|COLOR}} attribute 'exclude black color print | {{Cl|IF...THEN|IF}} attribute {{Cl|THEN}} {{Cl|COLOR}} attribute 'exclude black color print | ||
{{Cl|PRINT}} "{{Cl|COLOR}}" + {{Cl|STR$}}(attribute) + " = " + hex32$, red$, grn$, blu$ 'returns closest attribute | {{Cl|PRINT}} "{{Cl|COLOR}}" + {{Cl|STR$}}(attribute) + " = " + hex32$, red$, grn$, blu$ 'returns closest attribute | ||
{{Cl|NEXT}} | {{Cl|NEXT}} | ||
{{CodeEnd}} | {{CodeEnd}} | ||
{{OutputStart}}Attribute Hex value Red Green Blue | {{OutputStart}}Attribute Hex value Red Green Blue | ||
{{ | {{Text|COLOR 1 <nowiki>=</nowiki> &HFF0000AA 00 00 AA|#0000AA}} | ||
{{ | {{Text|COLOR 2 <nowiki>=</nowiki> &HFF00AA00 00 AA 00|#00AA00}} | ||
{{ | {{Text|COLOR 3 <nowiki>=</nowiki> &HFF00AAAA 00 AA AA|#00AAAA}} | ||
{{ | {{Text|COLOR 4 <nowiki>=</nowiki> &HFFAA0000 AA 00 00|#AA0000}} | ||
{{ | {{Text|COLOR 5 <nowiki>=</nowiki> &HFFAA00AA AA 00 AA|#AA00AA}} | ||
{{ | {{Text|COLOR 6 <nowiki>=</nowiki> &HFFAA5500 AA 55 00|#AA5500}} | ||
{{ | {{Text|COLOR 7 <nowiki>=</nowiki> &HFFAAAAAA AA AA AA|#AAAAAA}} | ||
{{ | {{Text|COLOR 8 <nowiki>=</nowiki> &HFF555555 55 55 55|#555555}} | ||
{{ | {{Text|COLOR 9 <nowiki>=</nowiki> &HFF5555FF 55 55 FF|#5555FF}} | ||
{{ | {{Text|COLOR 10 <nowiki>=</nowiki> &HFF55FF55 55 FF 55|#55FF55}} | ||
{{ | {{Text|COLOR 11 <nowiki>=</nowiki> &HFF55FFFF 55 FF FF|#55FFFF}} | ||
{{ | {{Text|COLOR 12 <nowiki>=</nowiki> &HFFFF5555 FF 55 55|#FF5555}} | ||
{{ | {{Text|COLOR 13 <nowiki>=</nowiki> &HFFFF55FF FF 55 FF|#FF55FF}} | ||
{{ | {{Text|COLOR 14 <nowiki>=</nowiki> &HFFFFFF55 FF FF 55|#FFFF55}} | ||
{{ | {{Text|COLOR 15 <nowiki>=</nowiki> &HFFFFFFFF FF FF FF|#F5F5F5}} | ||
{{OutputEnd}} | {{OutputEnd}} | ||
:''Explanation:'' The | :''Explanation:'' The DAC intensity values are multiplied by (255 / 63) to get the [[_RGB]] intensity values as [[HEX$|hexadecimal]] values. The individual 2 digit [[HEX$]] intensity values can be added to "&HFF" to make up the 32-bit hexadecimal string value necessary for [[VAL]] to return to [[_PALETTECOLOR]]. The statement is only included in the example to show how that can be done with any 32-bit color value. | ||
=== Read & write color port intensities with [[INP]] & [[OUT]] === | |||
=== | |||
* Legacy code may use [[INP]] and [[OUT]] to read or set color port intensities. '''QB64''' emulates VGA memory to maintain compatibility. | * Legacy code may use [[INP]] and [[OUT]] to read or set color port intensities. '''QB64''' emulates VGA memory to maintain compatibility. | ||
* The same can be achieved using [[_PALETTECOLOR]] ('''recommended practice'''). | * The same can be achieved using [[_PALETTECOLOR]] ('''recommended practice'''). | ||
:'''{{ | :'''{{Text|OUT &H3C7, attribute|green}}''' 'Set port to read RGB settings with: | ||
:'''{{ | :'''{{Text|color_intensity <nowiki>=</nowiki> INP(&H3C9)|green}}''' 'reads present intensity setting | ||
:'''{{ | :'''{{Text|OUT &H3C8, attribute|green}}''' 'Set port to write RGB settings with: | ||
:'''{{ | :'''{{Text|OUT &H3C9, color_intensity|green}}''' 'writes new intensity setting | ||
* After every 3 reads or writes, changes to next higher color attribute. Loops can be used to set more than one attribute's intensities. | * After every 3 reads or writes, changes to next higher color attribute. Loops can be used to set more than one attribute's intensities. | ||
Line 102: | Line 102: | ||
{{PageExamples}} | {{PageExamples}} | ||
''Example 1:'' Reading the default RGB color settings of color attribute 15. | ''Example 1:'' Reading the default RGB color settings of color attribute 15. | ||
{{CodeStart}} | {{CodeStart}} | ||
{{Cl|OUT}} &H3C7, 15 | {{Cl|OUT}} &H3C7, 15 | ||
red% = {{Cl|INP}}(&H3C9) | red% = {{Cl|INP}}(&H3C9) | ||
green% = {{Cl|INP}}(&H3C9) | green% = {{Cl|INP}}(&H3C9) | ||
blue% = {{Cl|INP}}(&H3C9) | blue% = {{Cl|INP}}(&H3C9) | ||
{{Cl|PRINT}} red%, green%, blue% | {{Cl|PRINT}} red%, green%, blue% | ||
{{CodeEnd}} | {{CodeEnd}} | ||
Line 116: | Line 116: | ||
''Example 2:'' Changing the color settings of attribute 0 (the background) to blue in [[SCREEN]]s 12 or 13. | ''Example 2:'' Changing the color settings of attribute 0 (the background) to blue in [[SCREEN]]s 12 or 13. | ||
{{CodeStart}} | {{CodeStart}} | ||
{{Cl|SCREEN}} 12 | {{Cl|SCREEN}} 12 | ||
{{Cl|OUT}} {{Cl|&H}}3C8, 0 'set color port attribute to write | {{Cl|OUT}} {{Cl|&H}}3C8, 0 'set color port attribute to write | ||
{{Cl|OUT}} {{Cl|&H}}3C9, 0 'red intensity | {{Cl|OUT}} {{Cl|&H}}3C9, 0 'red intensity | ||
{{Cl|OUT}} {{Cl|&H}}3C9, 0 'green intensity | {{Cl|OUT}} {{Cl|&H}}3C9, 0 'green intensity | ||
{{Cl|OUT}} {{Cl|&H}}3C9, 42 'blue intensity | {{Cl|OUT}} {{Cl|&H}}3C9, 42 'blue intensity | ||
{{Cl|OUT}} {{Cl|&H}}3C7, 0 | {{Cl|OUT}} {{Cl|&H}}3C7, 0 | ||
{{Cl|PRINT}} {{Cl|INP}}({{Cl|&H}}3C9); {{Cl|INP}}({{Cl|&H}}3C9); {{Cl|INP}}({{Cl|&H}}3C9) | {{Cl|PRINT}} {{Cl|INP}}({{Cl|&H}}3C9); {{Cl|INP}}({{Cl|&H}}3C9); {{Cl|INP}}({{Cl|&H}}3C9) | ||
{{Cl|END}} | {{Cl|END}} | ||
{{CodeEnd}} | {{CodeEnd}} | ||
{{OutputStartBG1}} 0 0 42 {{OutputEnd}} | {{OutputStartBG1}}{{Text| 0 0 42|#FCFCFC}}{{OutputEnd}} | ||
''Example 3:'' Printing in fullscreen SCREEN 0 mode with a color background under the text only. | ''Example 3:'' Printing in fullscreen SCREEN 0 mode with a color background under the text only. | ||
{{CodeStart}} | {{CodeStart}} | ||
{{Cl|SCREEN}} 0: {{Cl|_FULLSCREEN}} ' used for fullscreen instead of window | {{Cl|SCREEN}} 0: {{Cl|_FULLSCREEN}} ' used for fullscreen instead of window | ||
{{Cl|COLOR}} 14, 6: {{Cl|LOCATE}} 4, 4: {{Cl|PRINT}} "Hello!" | {{Cl|COLOR}} 14, 6: {{Cl|LOCATE}} 4, 4: {{Cl|PRINT}} "Hello!" | ||
{{CodeEnd}} | {{CodeEnd}} | ||
{{OutputStart}} | {{OutputStart}} | ||
Line 143: | Line 143: | ||
''Example 4:'' Using [[CLS]] after setting the background color in SCREEN 0 to make the color cover the entire screen. | ''Example 4:'' Using [[CLS]] after setting the background color in SCREEN 0 to make the color cover the entire screen. | ||
{{CodeStart}} | {{CodeStart}} | ||
{{Cl|SCREEN}} 0: {{Cl|_FULLSCREEN}} | {{Cl|SCREEN}} 0: {{Cl|_FULLSCREEN}} | ||
{{Cl|COLOR}} , 7: {{Cl|CLS}} | {{Cl|COLOR}} , 7: {{Cl|CLS}} | ||
{{Cl|COLOR}} 9: {{Cl|PRINT}} "Hello" | {{Cl|COLOR}} 9: {{Cl|PRINT}} "Hello" | ||
{{CodeEnd}} | {{CodeEnd}} | ||
{{OutputStartBG7}} | {{OutputStartBG7}} | ||
Line 154: | Line 154: | ||
''Example 5:'' Using a different foreground color for each letter: | ''Example 5:'' Using a different foreground color for each letter: | ||
{{CodeStart}} | {{CodeStart}} | ||
{{Cl|SCREEN}} 0 | {{Cl|SCREEN}} 0 | ||
{{Cl|COLOR}} 1: {{Cl|PRINT}} "H"; | {{Cl|COLOR}} 1: {{Cl|PRINT}} "H"; | ||
Line 165: | Line 165: | ||
{{Cl|COLOR}} 12: {{Cl|PRINT}} "R"; | {{Cl|COLOR}} 12: {{Cl|PRINT}} "R"; | ||
{{Cl|COLOR}} 13: {{Cl|PRINT}} "L"; | {{Cl|COLOR}} 13: {{Cl|PRINT}} "L"; | ||
{{Cl|COLOR}} 14: {{Cl|PRINT}} "D" | {{Cl|COLOR}} 14: {{Cl|PRINT}} "D" | ||
{{CodeEnd}} | {{CodeEnd}} | ||
{{OutputStart}} | {{OutputStart}} | ||
{{ | {{Text|H|#0000aa}}{{Text|E|#00aaaa}}{{Text|L|#aa0000}}{{Text|L|#aa00aa}}{{Text|O|#aa5500}} | ||
{{ | {{Text|W|#5454fc}}{{Text|O|#54fcfc}}{{Text|R|#fc5454}}{{Text|L|#fc54fc}}{{Text|D|#fcfc54}} | ||
{{OutputEnd}} | {{OutputEnd}} | ||
Line 187: | Line 187: | ||
* [[_BACKGROUNDCOLOR]] | * [[_BACKGROUNDCOLOR]] | ||
* [[_PALETTECOLOR]] | * [[_PALETTECOLOR]] | ||
* [[ | * [[Windows Libraries#Color_Dialog_Box|Color Dialog Box]] | ||
* [ | * [https://qb64phoenix.com/qb64wiki/resources/Color0.html $COLOR:0 Name Table] | ||
* [https://qb64phoenix.com/qb64wiki/resources/Color32.html $COLOR:32 Name Table] | |||
{{PageNavigation}} | {{PageNavigation}} |
Latest revision as of 19:27, 13 June 2024
The COLOR statement is used to change the foreground and background colors for printing text.
Syntax
- COLOR [foreground&][, background&]
Description
- background& colors are available in all QB64 color SCREEN modes.
- SCREEN mode 10 has only 3 white foreground attributes including flashing.
- To change the background& color only, use a comma and the desired color. Ex: COLOR , background&
- Graphic drawing statements like PSET, PRESET, LINE, etc, also use the colors set by the COLOR statement if no color is passed when they are called.
- The $COLOR metacommand adds named color constants for both text and 32-bit modes.
Screen Mode Attributes
- SCREEN 0 background& colors 0 to 7 can be changed each text character without affecting other text. Use CLS after a background color statement to create a fullscreen background color. 64 DAC hues with 16 high intensity blinking foreground (16 to 31) color attributes. See _BLINK.
- See example 7 below for more SCREEN 0 background colors.
- SCREEN 1 has 4 background color attributes: 0 = black, 1 = blue, 2 = green, 3 = grey. White foreground color only.
- SCREEN 2 is monochrome with white forecolor and black background.
- SCREEN 7 can use 16 (DAC) colors with background colors. RGB settings can be changed in colors 0 to 7 using _PALETTECOLOR.
- SCREEN 8 has 16 color attributes with 16 background colors.
- SCREEN 9 can use up to 64 DAC color hues in 16 color attributes with background colors assigned to attribute 0 with a _PALETTECOLOR swap. RGB settings can be changed in colors 0 to 5 and 7 using _PALETTECOLOR.
- SCREEN 10 has only 4 color attributes with black background. COLOR 0 = black, 1 = grey, 2 = flash white and 3 = bright white.
- SCREEN 11 is monochrome with white forecolor and a black background.
- SCREEN 12 can use 16 color attributes with a black background. 256K possible RGB color hues. Background colors can be used with QB64.
- SCREEN 13 can use 256 color attributes with a black background. 256K possible RGB hues.
- PALETTE swaps can be made in SCREEN 7 and 9 only. Those screens were DAC screen modes in QBasic.
- _DEST can be used to set the destination page or image to color using QB64.
- _DEFAULTCOLOR returns the current color being used on an image or screen page handle.
24/32-Bit colors using QB64
- Pixel color intensities for red, green, blue and alpha range from 0 to 255 when used with _RGB, _RGBA, _RGB32 and RGBA32.
- Combined RGB function values returned are LONG values. Blue intensity values may be cut off using SINGLE variables.
- _ALPHA transparency values can range from 0 as transparent up to 255 which is fully opaque.
- _CLEARCOLOR can also be used to set a color as transparent.
- Colors can be mixed by using _BLEND (default) in 32-bit screen modes. _DONTBLEND disables blending.
- NOTE: Default 32-bit backgrounds are clear black or _RGBA(0, 0, 0, 0). Use CLS to make the black opaque.
RGB Palette Intensities
RGB intensity values can be converted to hexadecimal values to create the LONG _PALETTECOLOR value in non-32-bit screens:
SCREEN 12 alpha$ = "FF" 'solid alpha colors only PRINT "Attribute = Hex value Red Green Blue " PRINT COLOR 7 FOR attribute = 1 TO 15 OUT &H3C7, attribute 'set color attribute to read red$ = HEX$(INP(&H3C9) * 255 / 63) 'convert port setting to 32 bit values grn$ = HEX$(INP(&H3C9) * 255 / 63) blu$ = HEX$(INP(&H3C9) * 255 / 63) IF LEN(red$) = 1 THEN red$ = "0" + red$ '2 hex digits required IF LEN(grn$) = 1 THEN grn$ = "0" + grn$ 'for low or zero hex values IF LEN(blu$) = 1 THEN blu$ = "0" + blu$ hex32$ = "&H" + alpha$ + red$ + grn$ + blu$ _PALETTECOLOR attribute, VAL(hex32$) 'VAL converts hex string to a LONG 32 bit value IF attribute THEN COLOR attribute 'exclude black color print PRINT "COLOR" + STR$(attribute) + " = " + hex32$, red$, grn$, blu$ 'returns closest attribute NEXT |
Attribute Hex value Red Green Blue COLOR 1 = &HFF0000AA 00 00 AA COLOR 2 = &HFF00AA00 00 AA 00 COLOR 3 = &HFF00AAAA 00 AA AA COLOR 4 = &HFFAA0000 AA 00 00 COLOR 5 = &HFFAA00AA AA 00 AA COLOR 6 = &HFFAA5500 AA 55 00 COLOR 7 = &HFFAAAAAA AA AA AA COLOR 8 = &HFF555555 55 55 55 COLOR 9 = &HFF5555FF 55 55 FF COLOR 10 = &HFF55FF55 55 FF 55 COLOR 11 = &HFF55FFFF 55 FF FF COLOR 12 = &HFFFF5555 FF 55 55 COLOR 13 = &HFFFF55FF FF 55 FF COLOR 14 = &HFFFFFF55 FF FF 55 COLOR 15 = &HFFFFFFFF FF FF FF |
- Explanation: The DAC intensity values are multiplied by (255 / 63) to get the _RGB intensity values as hexadecimal values. The individual 2 digit HEX$ intensity values can be added to "&HFF" to make up the 32-bit hexadecimal string value necessary for VAL to return to _PALETTECOLOR. The statement is only included in the example to show how that can be done with any 32-bit color value.
Read & write color port intensities with INP & OUT
- Legacy code may use INP and OUT to read or set color port intensities. QB64 emulates VGA memory to maintain compatibility.
- The same can be achieved using _PALETTECOLOR (recommended practice).
- OUT &H3C7, attribute 'Set port to read RGB settings with:
- color_intensity = INP(&H3C9) 'reads present intensity setting
- OUT &H3C8, attribute 'Set port to write RGB settings with:
- OUT &H3C9, color_intensity 'writes new intensity setting
- After every 3 reads or writes, changes to next higher color attribute. Loops can be used to set more than one attribute's intensities.
- Color port setting of red, green and blue intensities can be done in ascending order.
- Color port attribute intensity values range from 0 to 63 (1/4 of the 32-bit values) in QBasic's legacy 4 and 8 bit screen modes.
Examples
Example 1: Reading the default RGB color settings of color attribute 15.
OUT &H3C7, 15 red% = INP(&H3C9) green% = INP(&H3C9) blue% = INP(&H3C9) PRINT red%, green%, blue% |
63 63 63 |
Example 2: Changing the color settings of attribute 0 (the background) to blue in SCREENs 12 or 13.
SCREEN 12 OUT &H3C8, 0 'set color port attribute to write OUT &H3C9, 0 'red intensity OUT &H3C9, 0 'green intensity OUT &H3C9, 42 'blue intensity OUT &H3C7, 0 PRINT INP(&H3C9); INP(&H3C9); INP(&H3C9) END |
0 0 42
|
Example 3: Printing in fullscreen SCREEN 0 mode with a color background under the text only.
SCREEN 0: _FULLSCREEN ' used for fullscreen instead of window COLOR 14, 6: LOCATE 4, 4: PRINT "Hello!" |
Hello!
|
Example 4: Using CLS after setting the background color in SCREEN 0 to make the color cover the entire screen.
SCREEN 0: _FULLSCREEN COLOR , 7: CLS COLOR 9: PRINT "Hello" |
Hello
|
Example 5: Using a different foreground color for each letter:
SCREEN 0 COLOR 1: PRINT "H"; COLOR 3: PRINT "E"; COLOR 4: PRINT "L"; COLOR 5: PRINT "L"; COLOR 6: PRINT "O" COLOR 9: PRINT "W"; COLOR 11: PRINT "O"; COLOR 12: PRINT "R"; COLOR 13: PRINT "L"; COLOR 14: PRINT "D" |
HELLO WORLD |
See also
- $COLOR (metacommand)
- _RGB, _RGBA, _RGB32, RGBA32.
- _RED, _GREEN, _BLUE
- _RED32, _GREEN32, _BLUE32
- _ALPHA, _ALPHA32, _CLEARCOLOR
- PRINT, LOCATE, SCREEN
- POINT, SCREEN (function)
- OUT, INP, PALETTE
- _BLINK
- _DEFAULTCOLOR
- _BACKGROUNDCOLOR
- _PALETTECOLOR
- Color Dialog Box
- $COLOR:0 Name Table
- $COLOR:32 Name Table