x
• Status: Solved
• Priority: Medium
• Security: Public
• Views: 2251

# Color fade to white using Pset

Hi

I need help with the logic to use pset to draw a color bar that fades from a given RGB to white over the scalewidth of a form.

Private Sub Command1_Click()

Dim r As Integer
Dim g As Integer
Dim b As Integer

r = 14
g = 67
b = 146

For i = 1 To Me.ScaleWidth Step 1
For j = 1 To CInt(Me.ScaleHeight / 10) Step 10
' how do I increment the values of r,g,b to 255 relative to the ScaleWidth?
' if that makes sense?
' The idea is that r,g,b should arrive at 255 at about the same time.
PSet (i, j), RGB(r, g, b)
Next j
Next i

End Sub

Alan
0
Alan Warren
• 2
• 2
1 Solution

Commented:
Increment by: the difference / number of steps

ie:

dim rd as integer, gd as integer, bd as integer

rd = (255 - r) \ (me.scaleheight \ 10)
gd = (255 - g) \ (me.scaleheight \ 10)
bd = (255 - b) \ (me.scaleheight \ 10)

...
r = r + rd
g = g + gd
b = b + bd

I've used "\" instead of "/" as "\" is integer divide, so you don't need CInt(), but you may find it works better using single for the colours + deltas (rd,gd,bd) then CInt ing them at the time of PSet

As a side, PSet is not going to be the quickest way to do this (it might be very slow) - you'll have to look into making API calls, but that's another subject.
0

Applications DeveloperAuthor Commented:
Hi Nazdor,

Thanks for that mate.

The speed is not an issue, it's just a tool for creating some background jpegs to be used for style switching with css.
So I hope to have half a dozen jpegs that fade from left to right 800px wide * 1px high that I can apply with Cascading Style Sheets like this. So achieving maximum impact with very little data transfer accross the WAN

body.standard
{
margin-top:0px;
margin-left:0px;
margin-right:0px;
margin-bottom:0px;
font-weight:normal;
font:9pt Verdana, Tahoma, Arial, swiss, sans-serif;
color:#FFFFFF;
background-repeat: repeat-y;   //* the repeat-y is like a fill down *//
}

Anyway after a bit of mucking around this is close enough to what I wanted.

Private Sub Command1_Click()
Me.Refresh
Dim r As Integer
Dim g As Integer
Dim b As Integer
Dim x As Integer

Dim iIncR As Integer
Dim iIncG As Integer
Dim iIncB As Integer

' 37,47,90
r = 37
g = 47
b = 90

x = CInt(Me.ScaleWidth / 156)

iIncR = CInt((255 - r))
iIncG = CInt((255 - g))
iIncB = CInt((255 - b))

For i = 1 To Me.ScaleWidth Step 1
If (i + iIncR) Mod x = 0 Then: r = r + 1: 'Debug.Print r, g, b
If (i + iIncG) Mod x = 0 Then: g = g + 1: 'Debug.Print r, g, b
If (i + iIncB) Mod x = 0 Then: b = b + 1: 'Debug.Print r, g, b
'If Me.ScaleWidth - i = 150 Then: Debug.Print Hex(r) & Hex(g) & Hex(b)
For j = 1 To CInt(Me.ScaleHeight / 8)
PSet (i, j), RGB(r, g, b)
Next j
Next i

End Sub

Alan
0

Commented:
Sorry, should have looked quite a bit closer at your example - just assumed it was a kind of picture fades to white type of thing.  There are some cool api functions that might do what you want, just can't think of them off the top of my head.  But if you've got what you want, then there's no worry.
0

Applications DeveloperAuthor Commented:
Hi Nazdor,

Thanks for your help, it looks good, check it out.
Using binary large objects with Microsoft Access
http://www26.brinkster.com/alzowze/blobs.asp

Alan
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.