DEFLNG A-Z

w = _DESKTOPWIDTH
h = _DESKTOPHEIGHT

SCREEN _NEWIMAGE(w, h, 32)
_FULLSCREEN _SQUAREPIXELS , _SMOOTH

'gradientHorizontal 0, 0, w, h, _RGB(255, 255, 0), _RGB(55, 0, 55)
'gradientHorizontal 0, 0, w, h, _RGB(0, 255, 0), _RGB(255, 127, 0)
'gradientVertical 0, 0, w, h, _RGB(155, 0, 0), _RGB(255, 255, 0)

' (Dark -> Light -> Dark)
'gradientHorizontal 0, 0, w / 2, h, _RGB(31, 31, 31), _RGB(223, 223, 223)
'gradientHorizontal w / 2, 0, w / 2, h, _RGB(223, 223, 223), _RGB(31, 31, 31)

' (Light -> Dark -> Light)
gradientHorizontal 0, 0, (w / 4) * 3, h, _RGB(223, 223, 223), _RGB(31, 31, 31)
gradientHorizontal (w / 4) * 3, 0, w, h, _RGB(31, 31, 31), _RGB(223, 223, 223)

' (Dark -> Light -> Dark)
'gradientVertical 0, 0, w, h / 2, _RGB(31, 31, 31), _RGB(223, 223, 223)
'gradientVertical 0, h / 2, w, h / 2, _RGB(223, 223, 223), _RGB(31, 31, 31)

' (Light -> Dark -> Light)
'gradientVertical 0, 0, w, h / 2, _RGB(223, 223, 223), _RGB(31, 31, 31)
'gradientVertical 0, h / 2, w, h / 2, _RGB(31, 31, 31), _RGB(223, 223, 223)

'gradientVertical 0, 0, w, h, _RGB(255, 255, 255), _RGB(0, 0, 0)

LINE (0, 0)-((_WIDTH / 4) * 3, h / 6), _RGBA32(255, 0, 0, 95), BF
LINE (0, h / 6)-((_WIDTH / 4) * 3, (h / 6) * 2), _RGBA32(0, 255, 0, 95), BF
LINE (0, (h / 6) * 2)-((_WIDTH / 4) * 3, (h / 6) * 3), _RGBA32(255, 255, 0, 95), BF
LINE (0, (h / 6) * 3)-((_WIDTH / 4) * 3, (h / 6) * 4), _RGBA32(0, 0, 255, 95), BF
LINE (0, (h / 6) * 4)-((_WIDTH / 4) * 3, (h / 6) * 5), _RGBA32(255, 0, 255, 95), BF
LINE (0, (h / 6) * 5)-((_WIDTH / 4) * 3, (h / 6) * 6), _RGBA32(0, 255, 255, 95), BF
LINE ((_WIDTH / 4) * 3, 0)-(_WIDTH, (h / 5)), _RGBA32(255, 255, 255, 95), BF
LINE ((_WIDTH / 4) * 3, (h / 5))-(_WIDTH, (h / 5) * 2), _RGBA32(191, 191, 191, 95), BF
LINE ((_WIDTH / 4) * 3, (h / 5) * 2)-(_WIDTH, (h / 5) * 3), _RGBA32(127, 127, 127, 95), BF
LINE ((_WIDTH / 4) * 3, (h / 5) * 3)-(_WIDTH, (h / 5) * 4), _RGBA32(63, 63, 63, 95), BF
LINE ((_WIDTH / 4) * 3, (h / 5) * 4)-(_WIDTH, (h / 5) * 5), _RGBA32(0, 0, 0, 95), BF
img2 = _NEWIMAGE(w, h, 32)
ditherImage 0, img2, 8

'LINE (0, 0)-(_WIDTH, _HEIGHT), _RGBA32(255, 190, 0, 95), BF

_DEST 0
_PUTIMAGE , img2

DO
LOOP UNTIL _KEYHIT = 27
SYSTEM

SUB gradientHorizontal (x0, y0, w, h, c1, c2)
    DIM mr AS DOUBLE, mg AS DOUBLE, mb AS DOUBLE

    mr = (_RED(c2) - _RED(c1)) / w
    mg = (_GREEN(c2) - _GREEN(c1)) / w
    mb = (_BLUE(c2) - _BLUE(c1)) / w

    FOR x = 0 TO w - 1

        r = _RED(c2) + (x - w) * mr
        g = _GREEN(c2) + (x - w) * mg
        b = _BLUE(c2) + (x - w) * mb

        LINE (x + x0, y0)-STEP(0, h), _RGB(r, g, b), BF
    NEXT
END SUB

SUB gradientVertical (x0, y0, w, h, c1, c2)
    DIM mr AS DOUBLE, mg AS DOUBLE, mb AS DOUBLE

    mr = (_RED(c2) - _RED(c1)) / h
    mg = (_GREEN(c2) - _GREEN(c1)) / h
    mb = (_BLUE(c2) - _BLUE(c1)) / h

    FOR y = 0 TO h - 1
        r = _RED(c2) + (y - h) * mr
        g = _GREEN(c2) + (y - h) * mg
        b = _BLUE(c2) + (y - h) * mb

        LINE (x0, y + y0)-STEP(w, 0), _RGB(r, g, b), BF
    NEXT
END SUB

'colour dither
'source image, destination image, number of colours per channel
SUB ditherImage (img1, img2, num)
    w = _WIDTH(img1)
    h = _HEIGHT(img1)

    _DEST img2
    _SOURCE img2

    _PUTIMAGE , img1

    FOR y = 0 TO h - 1
        FOR x = 0 TO w - 1

            z = POINT(x, y)

            r = (_RED(z) * num \ 255) * 255 \ num
            g = (_GREEN(z) * num \ 255) * 255 \ num
            b = (_BLUE(z) * num \ 255) * 255 \ num

            PSET (x, y), _RGB(r, g, b)

            qr = _RED(z) - r
            qg = _GREEN(z) - g
            qb = _BLUE(z) - b

            r = _RED(POINT(x + 1, y)) + qr * 7 / 16
            g = _GREEN(POINT(x + 1, y)) + qg * 7 / 16
            b = _BLUE(POINT(x + 1, y)) + qb * 7 / 16
            PSET (x + 1, y), _RGB(r, g, b)

            r = _RED(POINT(x - 1, y + 1)) + qr * 3 / 16
            g = _GREEN(POINT(x - 1, y + 1)) + qg * 3 / 16
            b = _BLUE(POINT(x - 1, y + 1)) + qb * 3 / 16
            PSET (x - 1, y + 1), _RGB(r, g, b)

            r = _RED(POINT(x, y + 1)) + qr * 5 / 16
            g = _GREEN(POINT(x, y + 1)) + qg * 5 / 16
            b = _BLUE(POINT(x, y + 1)) + qb * 5 / 16
            PSET (x, y + 1), _RGB(r, g, b)

            r = _RED(POINT(x + 1, y + 1)) + qr * 1 / 16
            g = _GREEN(POINT(x + 1, y + 1)) + qg * 1 / 16
            b = _BLUE(POINT(x + 1, y + 1)) + qb * 1 / 16
            PSET (x + 1, y + 1), _RGB(r, g, b)
        NEXT
    NEXT
END SUB
