You are not logged in or registered. Please login or register to use the full functionality of this board...
Login Register For FREE

QB64 Member Project - Touche
QB64 Member Project - Blokus
QB64 Member Project - Red Scrolling LED Sign
QB64 Member Project - Spinning Color Wheel
QB64 Member Project - Rubix's Magic
QB64 Member Project - Splatter
QB64 Member Project - Connect Four
QB64 Member Project - Inside Moves
QB64 Member Project - Dreamy Clock
QB64 Member Project - Pivot version two
QB64 Member Project - 9 Board
QB64 Member Project - Line Thickness
QB64 Member Project - Basic Dithering
QB64 Member Project - Color Rotating Text
QB64 Member Project - Quarto
QB64 Member Project - Foursight
QB64 Member Project - Amazon
QB64 Member Project - Qubic
QB64 Member Project - Score 4
QB64 Member Project - Martin Fractals version one
QB64 Member Project - Kings Vallery version two
QB64 Member Project - Othello
QB64 Member Project - Algeria Weather
QB64 Member Project - STxAxTIC 3D World
QB64 Member Project - Overboard
QB64 Member Project - Domain
QB64 Member Project - Sabotage
QB64 Member Project - Dakapo
QB64 Member Project - Color Triangles
QB64 Member Project - Martin Fractals version four
QB64 Member Project - Kobolts Monopoly
QB64 Member Project - Swirl
QB64 Member Project - Rotating Background
QB64 Member Project - Full Color LED Sign
QB64 Member Project - Bowditch curve
QB64 Member Project - Input
QB64 Member Project - Martin Fractals version two
QB64 Member Project - ARB Checkers
QB64 Member Project - RGB Color Wheel
QB64 Member Project - Pivet version one
QB64 Member Project - Point Blank
QB64 Member Project - Spiro Roses
QB64 Member Project - Kings Court
QB64 Member Project - Kings Valley verion one
QB64 Member Project - Isolation
QB64 Member Project - MAPTRIANGLE
QB64 Member Project - Exit
QB64 Member Project - Martin Fractals version three
QB64 Member Project - OpenGL Triangles



Rotating Colors in Text Strings ver 2.0 (Cool)
10-26-2016, 02:41 AM (This post was last modified: 10-26-2016 02:48 AM by Waltersmind.)
Post: #1
 (Print Post)
Rotating Colors in Text Strings ver 2.0 (Cool)
Well, playing around with my first "rotating colors in text strings" demo, I came up with a whole new concept (at least to me) of rotating text colors.

While this demo is based on the RGB color wheel, I did not use any fancy high-end mathematics (SIN, COS, Interpolation, etc...) in it. My personal challenge with this project was to do it with simple math (add, sub) and basic logic (IF...THEN & SELECT CASE).

Why did I do it this way? Well, the short answer (if there was a such thing with me) is that when I looked at a RGB color wheel, I broke them colors down into "sub-pixels", which is nothing more than the Red, Green, and Blue color components that make up a colored pixel on screen (like we didn't know that). By looking at them this way, I saw a logical pattern going on and I wanted to emulate it with as basic of means as possible. Another reason was that I wanted to use a single string (final size was 11 bytes) to contain the logic and the colors of each color component.

Before I share the code with you, here is a screenshot of the demo. As you can see, I went an extra step in the display of the demo, by using text to draw out the words, "The Joyful Programmer" and add a double line border around the words, which was also text as well.

   


Here is the code:

Code Snippet: [Select]
' ColorState:
'              Byte    01 = Red State (Available Values: 0 = LOCKED, 1 = FADE IN, 2 = FADE OUT)
'              Byte 02-03 = Red's Current Step (Available Values: 00 - MAX VALUE (BYTES 10-11))
'              Byte    04 = Green State (Available Values: 0 = LOCKED, 1 = FADE IN, 2 = FADE OUT)
'              Byte 05-06 = Green's Current Step (Available Values: 00 - MAX VALUE (BYTES 10-11))
'              Byte    07 = Blue State (Available Values: 0 = LOCKED, 1 = FADE IN, 2 = FADE OUT)
'              Byte 08-09 = Blue's Current Step (Available Values: 00 - MAX VALUE (BYTES 10-11))
'              Byte 10-11 = Max Number of steps per color (Available Values: 00 - FF)
'
DIM SHARED ColorState AS STRING * 11

'ColorState = "02010000020" ' Start the ColorState off with bright red and fade in on green
ColorState = "01010000010" ' Start the ColorState off with bright red and fade in on green

SCREEN _NEWIMAGE(906, 600, 32)
_TITLE "Rotating Colors in Text Strings Ver 2"

Timer1 = _FREETIMER
ON TIMER(Timer1, .02) GOSUB UpdateColorState

_PRINTMODE _KEEPBACKGROUND

TIMER(Timer1) ON
DO
    _LIMIT 30

    LOCATE 3, 5: PrintColor "Welcome to my world of colors! Oh so beautiful colors they are!"
    LOCATE 5, 5: PrintColor "I love rotating colors on these lines of text."
    LOCATE 7, 5: PrintColor "This could be expanded to any amount of colors the developer chooses."

    LOCATE 14, 11: PrintColor "²²²²²²²²\ ²²\                          ²²²²²\                      ²²²²²²\            ²²\"
    LOCATE 15, 11: PrintColor "\__²²  __|²² |                         \__²² |                    ²²  __²²\           ²² |"
    LOCATE 16, 11: PrintColor "   ²² |   ²²²²²²²\   ²²²²²²\              ²² | ²²²²²²\  ²²\   ²²\ ²² /  \__|²²\   ²²\ ²² |"
    LOCATE 17, 11: PrintColor "   ²² |   ²²  __²²\ ²²  __²²\             ²² |²²  __²²\ ²² |  ²² |²²²²\     ²² |  ²² |²² |"
    LOCATE 18, 11: PrintColor "   ²² |   ²² |  ²² |²²²²²²²² |      ²²\   ²² |²² /  ²² |²² |  ²² |²²  _|    ²² |  ²² |²² |"
    LOCATE 19, 11: PrintColor "   ²² |   ²² |  ²² |²²   ____|      ²² |  ²² |²² |  ²² |²² |  ²² |²² |      ²² |  ²² |²² |"
    LOCATE 20, 11: PrintColor "   ²² |   ²² |  ²² |\²²²²²²²\       \²²²²²²  |\²²²²²²  |\²²²²²²² |²² |      \²²²²²²  |²² |"
    LOCATE 21, 11: PrintColor "   \__|   \__|  \__| \_______|       \______/  \______/  \____²² |\__|       \______/ \__|"
    LOCATE 22, 11: PrintColor "                                                        ²²\   ²² |"
    LOCATE 23, 11: PrintColor "                                                        \²²²²²²  |"
    LOCATE 24, 11: PrintColor "                                                         \______/"
    LOCATE 25, 4: PrintColor "²²²²²²²\"
    LOCATE 26, 4: PrintColor "²²  __²²\"
    LOCATE 27, 4: PrintColor "²² |  ²² | ²²²²²²\   ²²²²²²\   ²²²²²²\   ²²²²²²\  ²²²²²²\  ²²²²²²\²²²²\  ²²²²²²\²²²²\   ²²²²²²\   ²²²²²²\"
    LOCATE 28, 4: PrintColor "²²²²²²²  |²²  __²²\ ²²  __²²\ ²²  __²²\ ²²  __²²\ \____²²\ ²²  _²²  _²²\ ²²  _²²  _²²\ ²²  __²²\ ²²  __²²\"
    LOCATE 29, 4: PrintColor "²²  ____/ ²² |  \__|²² /  ²² |²² /  ²² |²² |  \__|²²²²²²² |²² / ²² / ²² |²² / ²² / ²² |²²²²²²²² |²² |  \__|"
    LOCATE 30, 4: PrintColor "²² |      ²² |      ²² |  ²² |²² |  ²² |²² |     ²²  __²² |²² | ²² | ²² |²² | ²² | ²² |²²   ____|²² |"
    LOCATE 31, 4: PrintColor "²² |      ²² |      \²²²²²²  |\²²²²²²² |²² |     \²²²²²²² |²² | ²² | ²² |²² | ²² | ²² |\²²²²²²²\ ²² |"
    LOCATE 32, 4: PrintColor "\__|      \__|       \______/  \____²² |\__|      \_______|\__| \__| \__|\__| \__| \__| \_______|\__|"
    LOCATE 33, 4: PrintColor "                              ²²\   ²² |"
    LOCATE 34, 4: PrintColor "                              \²²²²²²  |"
    LOCATE 35, 4: PrintColor "                               \______/"

    LOCATE 12, 2: PrintColor "É" + STRING$(109, "Í") + "»"

    FOR y = 13 TO 36
        LOCATE y, 2: PrintColor "º" + SPACE$(109) + "º"
    NEXT

    LOCATE 37, 2: PrintColor "È" + STRING$(109, "Í") + "¼"


    _DISPLAY

LOOP WHILE INKEY$ = ""

TIMER(Timer1) FREE

SYSTEM



UpdateColorState:

ColorState = AlterColorState$(ColorState)

RETURN


'
' PrintColor SUB
'
SUB PrintColor (Text AS STRING)

DIM CurrentColorState AS STRING * 11
DIM ColorStep AS DOUBLE

CurrentColorState = ColorState
ColorStep = 256 / VAL("&h" + MID$(CurrentColorState, 10, 2))

FOR C = 1 TO LEN(Text)

    Red = VAL("&H" + MID$(CurrentColorState, 2, 2)) * ColorStep
    Green = VAL("&H" + MID$(CurrentColorState, 5, 2)) * ColorStep
    Blue = VAL("&H" + MID$(CurrentColorState, 8, 2)) * ColorStep

    COLOR _RGB32(Red, Green, Blue)

    PRINT MID$(Text, C, 1);

    CurrentColorState = AlterColorState$(CurrentColorState)

NEXT

END SUB


'
' AlterColorState$ FUNCTION
'
FUNCTION AlterColorState$ (OldColorState AS STRING * 11)

DIM MaxStep AS _UNSIGNED _BYTE

MaxStep = VAL("&h" + MID$(OldColorState, 10, 2))

' Do logic on the RED color
SELECT CASE MID$(OldColorState, 1, 1)

    ' Check to see of the RED step needs to increment
    CASE "1"
        ' Get the CurrentStep of the RED color and increment it.
        CurrentStep = VAL("&h" + MID$(OldColorState, 2, 2)) + 1

        ' Store the new CurrentStep value
        MID$(OldColorState, 2, 2) = RIGHT$("0" + HEX$(CurrentStep), 2)

        ' See if the Current Step for the RED color is at it's max
        IF CurrentStep = MaxStep THEN
            ' Lock the RED color state
            MID$(OldColorState, 1, 1) = "0"
            ' Since we know this is the RED color and we just locked it, then
            ' set the BLUE color state to FadeOut
            MID$(OldColorState, 7, 1) = "2"
        END IF

        ' Check to see of the RED step needs to decrement
    CASE "2"

        ' Get the CurrentStep of the RED color and decrement it.
        CurrentStep = VAL("&h" + MID$(OldColorState, 2, 2)) - 1

        ' Store the new CurrentStep value
        MID$(OldColorState, 2, 2) = RIGHT$("0" + HEX$(CurrentStep), 2)

        ' See of the CurrentStep for the RED color is at zero
        IF CurrentStep = 0 THEN
            ' Lock the RED color state
            MID$(OldColorState, 1, 1) = "0"
            ' Since we know this is the RED color and we just locked it, then
            ' set the BLUE color state to FadeIn
            MID$(OldColorState, 7, 1) = "1"
        END IF

END SELECT

' Do logic on the GREEN color
SELECT CASE MID$(OldColorState, 4, 1)

    ' Check to see of the RED step needs to increment
    CASE "1"
        ' Get the CurrentStep of the RED color and increment it.
        CurrentStep = VAL("&h" + MID$(OldColorState, 5, 2)) + 1

        ' Store the new CurrentStep value
        MID$(OldColorState, 5, 2) = RIGHT$("0" + HEX$(CurrentStep), 2)

        ' See if the Current Step for the GREEN color is at it's max
        IF CurrentStep = MaxStep THEN
            ' Lock the GREEN color state
            MID$(OldColorState, 4, 1) = "0"
            ' Since we know this is the GREEN color and we just locked it, then
            ' set the RED color state to FadeOut
            MID$(OldColorState, 1, 1) = "2"
        END IF

        ' Check to see of the GREEN step needs to decrement
    CASE "2"

        ' Get the CurrentStep of the RED color and decrement it.
        CurrentStep = VAL("&h" + MID$(OldColorState, 5, 2)) - 1

        ' Store the new CurrentStep value
        MID$(OldColorState, 5, 2) = RIGHT$("0" + HEX$(CurrentStep), 2)

        ' See of the CurrentStep for the RED color is at zero
        IF CurrentStep = 0 THEN
            ' Lock the GREEN color state
            MID$(OldColorState, 4, 1) = "0"
            ' Since we know this is the GREEN color and we just locked it, then
            ' set the RED color state to FadeIn
            MID$(OldColorState, 1, 1) = "1"
        END IF

END SELECT


' Do logic on the BLUE color
SELECT CASE MID$(OldColorState, 7, 1)

    ' Check to see of the BLUE step needs to increment
    CASE "1"
        ' Get the CurrentStep of the BLUE color and increment it.
        CurrentStep = VAL("&h" + MID$(OldColorState, 8, 2)) + 1

        ' Store the new CurrentStep value
        MID$(OldColorState, 8, 2) = RIGHT$("0" + HEX$(CurrentStep), 2)

        ' See if the Current Step for the BLUE color is at it's max
        IF CurrentStep = MaxStep THEN
            ' Lock the BLUE color state
            MID$(OldColorState, 7, 1) = "0"
            ' Since we know this is the BLUE color and we just locked it, then
            ' set the GREEN color state to FadeOut
            MID$(OldColorState, 4, 1) = "2"
        END IF

        ' Check to see of the BLUE step needs to decrement
    CASE "2"

        ' Get the CurrentStep of the BLUE color and decrement it.
        CurrentStep = VAL("&h" + MID$(OldColorState, 8, 2)) - 1

        ' Store the new CurrentStep value
        MID$(OldColorState, 8, 2) = RIGHT$("0" + HEX$(CurrentStep), 2)

        ' See of the CurrentStep for the BLUE color is at zero
        IF CurrentStep = 0 THEN
            ' Lock the BLUE color state
            MID$(OldColorState, 7, 1) = "0"
            ' Since we know this is the BLUE color and we just locked it, then
            ' set the GREEN color state to FadeIn
            MID$(OldColorState, 4, 1) = "1"
        END IF

END SELECT

AlterColorState$ = OldColorState

END FUNCTION


I hope you enjoyed this little demo, and if so, please drop me a line in a post below to let me know.


Thanks,
Walter Whitman
The Joyful Programmer

The Joyful Programmer's online Amazon store:   http://astore.amazon.com/thejoy06-20
My YouTube Channel:   https://www.youtube.com/c/Thejoyfulprogrammer
My Pinterest Boards:  https://www.pinterest.com/waltersmind/boards/
The Joyful Programmer's FaceBook Page:   https://www.facebook.com/thejoyfulprogrammer
The Joyful Programmer's Twitter Page:   https://twitter.com/TheJoyfulProg
Find all posts by this user
Like Post
10-28-2016, 12:02 AM (This post was last modified: 10-28-2016 07:42 PM by Waltersmind.)
Post: #2
 (Print Post)
RE: Rotating Colors in Text Strings ver 2.0 (Cool)
The color rotating effect I shared above came about from RGB color wheels I found on Google Images. However, none of them really inspired me except for one that showed the sub-pixels that make up the various colors in the wheel. I loved it, but the image just didn't exactly have the look or feel I was after, so I set out and created my own. I wanted to share it with the rest of the community so you can not only see where I got my inspiration, but hopefully inspire some of you to create cool little demos of your own. It is all about fun you know.

Here is the color wheel I created:

   


See my hardware accelerated graphics demo of this color wheel at: Spinning RGB Sub-Pixel Color Wheel here on The QB64 Edition.


Walter Whitman
The Joyful Programmer

The Joyful Programmer's online Amazon store:   http://astore.amazon.com/thejoy06-20
My YouTube Channel:   https://www.youtube.com/c/Thejoyfulprogrammer
My Pinterest Boards:  https://www.pinterest.com/waltersmind/boards/
The Joyful Programmer's FaceBook Page:   https://www.facebook.com/thejoyfulprogrammer
The Joyful Programmer's Twitter Page:   https://twitter.com/TheJoyfulProg
Find all posts by this user
Like Post




Forum Jump:


User(s) browsing this thread: 1 Guest(s)