Newsgroup: it.comp.lang.visual-basic
Titolo: [PictureBox] [lungo] Problemi di colore

Sto creando programmi che mi disegnano frattali, ma mi sono trovato di
fronte ad un grosso problema. Come impostare i colori.
I colori in vb sono dei long, mi chiedevo se c'era un sistema per poter
ottenere una buona colorazione di un frattale nel quale i colori dipendono
da una valore di k che varia tra 1 e 21. Inserire un case e scegliere il
colore è bruttissimo, usare RGB(x,y,z) non è un granchè, e non mi sembra
bello neanche quallo che ottengo moltiplicando k per una costante che per
adesso è andata da 200 a 835000. Chiedo consiglio a voi e vi posto una parte
di programma. Se a qualcuno servisse posso postargli il programma completo
via e-mail.
Grazie mille,
MasterNet
nella form ci sono 3 combo box, 11 pulsanti e una picture box di nome frat
Private Sub Command1_Click()
    If Combo2.Text = "Salva" Then Frat.AutoRedraw = True Else
Frat.AutoRedraw = False
    Frat.Cls
    Frat.BackColor = &H400000
    Frat.ScaleMode = 3
    A = CInt(Combo1.Text)
    Label1.Caption = ""
    c1 = CDbl(Text1.Text)
    c2 = CDbl(Text2.Text)
    For i = 1 To (200 * A)
        xi = -2 + i / (50 * A)
        For j = 1 To (200 * A)
            yi = 2 - j / (50 * A)
            x = xi
            y = yi
            k = 1
            pbreak = False
            Do While (k <= 20) And (Not pbreak)
                k = k + 1
                xs = x * x - y * y + x * c1 - y * c2
                ys = 2 * x * y + x * c2 + y * c1
                x = xs
                y = ys
                z = x * x + y * y
                If z > 4 Then pbreak = True
            Loop
            If pbreak Then
                'If (a = 1) Then
                '    o = 2
                '    p = 1
                '    q = 3
                'ElseIf (a = 2) Then
                '    o = 1
                '    p = 1
                '    q = 2
                'ElseIf (a = 3) Then
                '    o = 1
                '    p = 1
                '    q = 3
                'End If
                        Select Case (k)
                    Case 1, 7, 13, 19
                        o = vbBlue
                    Case 2, 8, 14, 20
                        o = vbGreen
                    Case 3, 9, 15, 21
                        o = vbMagenta
                    Case 4, 10, 16
                        o = vbRed
                    Case 5, 11, 17
                        o = &HFF80
                    Case 6, 12, 18
                        o = vbYellow
        End Select
                If Combo3.Text <> "3" Then Frat.PSet (i - 5 * A, j - 25 *
A), o 'RGB((21 - k) * 4 * a * o, (21 - k) * 4 * a * p, (21 - k) * 4 * a * q)
                If Combo3.Text <> "1" Then
                    Frat.PSet (A * (200 - 5) - i, A * (200 - 25) - j), o
'RGB((21 - k) * 4 * a * o, (21 - k) * 4 * a * p, (21 - k) * 4 * a * q)
                End If
            End If
        Next
    Next
    Ciao = "Frat d1 " & Text1.Text & " " & Text2.Text & " " & Combo1.Text &
" " & Combo3.Text & ".bmp"
    If Combo2.Text = "Salva" Then SavePicture Frat.Image, Ciao
    Label1.Caption = "Ok"
End Sub
Private Sub Command10_Click()
     If Combo2.Text = "Salva" Then Frat.AutoRedraw = True Else
Frat.AutoRedraw = False
    Frat.Cls
    Frat.BackColor = &H400000
    Frat.ScaleMode = 3
    A = CInt(Combo1.Text)
    Label1.Caption = ""
    c1 = CDbl(Text1.Text)
    c2 = CDbl(Text2.Text)
    For i = 1 To (200 * A)
        xi = -2 + i / (50 * A)
        For j = 1 To (200 * A)
            yi = 2 - j / (50 * A)
            x = xi
            y = yi
            k = 1
            pbreak = False
            Do While (k <= 20) And (Not pbreak)
                k = k + 1
                xs = x * x - y * y + x * c1 - y * c2
                ys = 2 * x * y + x * c2 + y * c1
                x = xs
                y = ys
                z = x * x + y * y
                If z > 4 Then pbreak = True
            Loop
            If pbreak Then
                If Combo3.Text <> "3" Then Frat.PSet (i - 5 * A, j - 25 *
A), CLng(k * 1000 + y * 1000)
                If Combo3.Text <> "1" Then
                    Frat.PSet (A * (200 - 5) - i, A * (200 - 25) - j),
CLng((21 - k) * 1000 - y * 1000)
                End If
            End If
        Next
    Next
    Ciao = "Frat d10 " & Text1.Text & " " & Text2.Text & " " & Combo1.Text &
" " & Combo3.Text & ".bmp"
    If Combo2.Text = "Salva" Then SavePicture Frat.Image, Ciao
    Label1.Caption = "Ok"
End Sub
Private Sub Command11_Click()
     If Combo2.Text = "Salva" Then Frat.AutoRedraw = True Else
Frat.AutoRedraw = False
    Frat.Cls
    Frat.BackColor = &H400000
    Frat.ScaleMode = 3
    A = CInt(Combo1.Text)
    Label1.Caption = ""
    c1 = CDbl(Text1.Text)
    c2 = CDbl(Text2.Text)
    For i = 1 To (200 * A)
        xi = -2 + i / (50 * A)
        For j = 1 To (200 * A)
            yi = 2 - j / (50 * A)
            x = xi
            y = yi
            k = 1
            pbreak = False
            Do While (k <= 20) And (Not pbreak)
                k = k + 1
                xs = x * x - y * y + x * c1 - y * c2
                ys = 2 * x * y + x * c2 + y * c1
                x = xs
                y = ys
                z = x * x + y * y
                If z > 4 Then pbreak = True
            Loop
            If pbreak Then
                If Combo3.Text <> "3" Then Frat.PSet (i - 5 * A, j - 25 *
A), CLng(k * 1000 + j * 1000)
                If Combo3.Text <> "1" Then
                    Frat.PSet (A * (200 - 5) - i, A * (200 - 25) - j),
CLng((21 - k) * 1000 - (200 - j) * 1000)
                End If
            End If
        Next
    Next
    Ciao = "Frat d11 " & Text1.Text & " " & Text2.Text & " " & Combo1.Text &
" " & Combo3.Text & ".bmp"
    If Combo2.Text = "Salva" Then SavePicture Frat.Image, Ciao
    Label1.Caption = "Ok"
End Sub
Private Sub Command2_Click()
 If Combo2.Text = "Salva" Then Frat.AutoRedraw = True Else Frat.AutoRedraw =
False
    Frat.Cls
    Frat.BackColor = &H400000
    Frat.ScaleMode = 3
    A = CInt(Combo1.Text)
    Label1.Caption = ""
    c1 = CDbl(Text1.Text)
    c2 = CDbl(Text2.Text)
    For i = 1 To (200 * A)
        xi = -2 + i / (50 * A)
        For j = 1 To (200 * A)
            yi = 2 - j / (50 * A)
            x = xi
            y = yi
            k = 1
            pbreak = False
            Do While (k <= 20) And (Not pbreak)
                k = k + 1
                xs = x * x - y * y + x * c1 - y * c2
                ys = 2 * x * y + x * c2 + y * c1
                x = xs
                y = ys
                z = x * x + y * y
                If z > 4 Then pbreak = True
            Loop
            If pbreak Then
                If (A = 1) Then
                    o = 2
                    p = 1
                    q = 3
                ElseIf (A = 2) Then
                    o = 1
                    p = 1
                    q = 2
                ElseIf (A = 3) Then
                    o = 1
                    p = 1
                    q = 3
                End If
                If Combo3.Text <> "3" Then Frat.PSet (i - 5 * A, j - 25 *
A), RGB((21 - k) * 4 * A * o, (21 - k) * 4 * A * p, (21 - k) * 4 * A * q)
                If Combo3.Text <> "1" Then
                    Frat.PSet (A * (200 - 5) - i, A * (200 - 25) - j),
RGB((21 - k) * 4 * A * o, (21 - k) * 4 * A * p, (21 - k) * 4 * A * q)
                End If
            End If
        Next
    Next
    Ciao = "Frat d2 " & Text1.Text & " " & Text2.Text & " " & Combo1.Text &
" " & Combo3.Text & ".bmp"
    If Combo2.Text = "Salva" Then SavePicture Frat.Image, Ciao
    Label1.Caption = "Ok"
End Sub
Private Sub Command3_Click()
     If Combo2.Text = "Salva" Then Frat.AutoRedraw = True Else
Frat.AutoRedraw = False
    Frat.Cls
    Frat.BackColor = &H400000
    Frat.ScaleMode = 3
    A = CInt(Combo1.Text)
    Label1.Caption = ""
    c1 = CDbl(Text1.Text)
    c2 = CDbl(Text2.Text)
    For i = 1 To (200 * A)
        xi = -2 + i / (50 * A)
        For j = 1 To (200 * A)
            yi = 2 - j / (50 * A)
            x = xi
            y = yi
            k = 1
            pbreak = False
            Do While (k <= 20) And (Not pbreak)
                k = k + 1
                xs = x * x - y * y + x * c1 - y * c2
                ys = 2 * x * y + x * c2 + y * c1
                x = xs
                y = ys
                z = x * x + y * y
                If z > 4 Then pbreak = True
            Loop
            If pbreak Then
                ks = k
                If Combo3.Text <> "3" Then Frat.PSet (i - 5 * A, j - 25 *
A), CLng(k * 208725)
                If Combo3.Text <> "1" Then
                    Frat.PSet (A * (200 - 5) - i, A * (200 - 25) - j),
CLng((21 - k) * 208725)
                End If
            Else
                If Combo3.Text <> "3" Then Frat.PSet (i - 5 * A, j - 25 *
A), CLng(k * 2857)
                If Combo3.Text <> "1" Then
                    Frat.PSet (A * (200 - 5) - i, A * (200 - 25) - j),
CLng((21 - k) * 2857)
                End If
            End If
        Next
    Next
    Ciao = "Frat d3 " & Text1.Text & " " & Text2.Text & " " & Combo1.Text &
" " & Combo3.Text & ".bmp"
    If Combo2.Text = "Salva" Then SavePicture Frat.Image, Ciao
    Label1.Caption = "Ok"
End Sub
Private Sub Command4_Click()
     If Combo2.Text = "Salva" Then Frat.AutoRedraw = True Else
Frat.AutoRedraw = False
    Frat.Cls
    Frat.BackColor = &H400000
    Frat.ScaleMode = 3
    A = CInt(Combo1.Text)
    Label1.Caption = ""
    c1 = CDbl(Text1.Text)
    c2 = CDbl(Text2.Text)
    For i = 1 To (200 * A)
        xi = -2 + i / (50 * A)
        For j = 1 To (200 * A)
            yi = 2 - j / (50 * A)
            x = xi
            y = yi
            k = 1
            pbreak = False
            Do While (k <= 20) And (Not pbreak)
                k = k + 1
                xs = x * x - y * y + x * c1 - y * c2
                ys = 2 * x * y + x * c2 + y * c1
                x = xs
                y = ys
                z = x * x + y * y
                If z > 4 Then pbreak = True
            Loop
            If pbreak Then
                ks = k
                If Combo3.Text <> "3" Then Frat.PSet (i - 5 * A, j - 25 *
A), CLng(k * 1000 + i * 1000)
                If Combo3.Text <> "1" Then
                    Frat.PSet (A * (200 - 5) - i, A * (200 - 25) - j),
CLng((21 - k) * 1000 + (201 * A - i) * 1000)
                End If
            'Else
            '    If Combo3.Text <> "3" Then Frat.PSet (i - 5 * a, j - 25 *
a), CLng(ks * 1000 + i * 1000)
            '    If Combo3.Text <> "1" Then
            '        Frat.PSet (a * (200 - 5) - i, a * (200 - 25) - j),
CLng((21 - ks) * 1000 + (201 * a - i) * 1000)
            '    End If
            End If
        Next
    Next
    Ciao = "Frat d4 " & Text1.Text & " " & Text2.Text & " " & Combo1.Text &
" " & Combo3.Text & ".bmp"
    If Combo2.Text = "Salva" Then SavePicture Frat.Image, Ciao
    Label1.Caption = "Ok"
End Sub
Private Sub Command5_Click()
     If Combo2.Text = "Salva" Then Frat.AutoRedraw = True Else
Frat.AutoRedraw = False
    Frat.Cls
    Frat.BackColor = &H400000
    Frat.ScaleMode = 3
    A = CInt(Combo1.Text)
    Label1.Caption = ""
    c1 = CDbl(Text1.Text)
    c2 = CDbl(Text2.Text)
    For i = 1 To (200 * A)
        xi = -2 + i / (50 * A)
        For j = 1 To (200 * A)
            yi = 2 - j / (50 * A)
            x = xi
            y = yi
            k = 1
            pbreak = False
            Do While (k <= 20) And (Not pbreak)
                k = k + 1
                xs = x * x - y * y + x * c1 - y * c2
                ys = 2 * x * y + x * c2 + y * c1
                x = xs
                y = ys
                z = x * x + y * y
                If z > 4 Then pbreak = True
            Loop
            If pbreak Then
                If Combo3.Text <> "3" Then Frat.PSet (i - 5 * A, j - 25 *
A), CLng(k * 1000 + x * 1000)
                If Combo3.Text <> "1" Then
                    Frat.PSet (A * (200 - 5) - i, A * (200 - 25) - j),
CLng((21 - k) * 1000 - x * 1000)
                End If
            End If
        Next
    Next
    Ciao = "Frat d5 " & Text1.Text & " " & Text2.Text & " " & Combo1.Text &
" " & Combo3.Text & ".bmp"
    If Combo2.Text = "Salva" Then SavePicture Frat.Image, Ciao
    Label1.Caption = "Ok"
End Sub
Private Sub Command6_Click()
     If Combo2.Text = "Salva" Then Frat.AutoRedraw = True Else
Frat.AutoRedraw = False
    Frat.Cls
    Frat.BackColor = &H400000
    Frat.ScaleMode = 3
    A = CInt(Combo1.Text)
    Label1.Caption = ""
    c1 = CDbl(Text1.Text)
    c2 = CDbl(Text2.Text)
    For i = 1 To (200 * A)
        xi = -2 + i / (50 * A)
        For j = 1 To (200 * A)
            yi = 2 - j / (50 * A)
            x = xi
            y = yi
            k = 1
            pbreak = False
            Do While (k <= 20) And (Not pbreak)
                k = k + 1
                xs = x * x - y * y + x * c1 - y * c2
                ys = 2 * x * y + x * c2 + y * c1
                x = xs
                y = ys
                z = x * x + y * y
                If z > 4 Then pbreak = True
            Loop
            If pbreak Then
                If Combo3.Text <> "3" Then Frat.PSet (i - 5 * A, j - 25 *
A), CLng(k * 1000 + (i / j - 201 * A) * 1000)
                If Combo3.Text <> "1" Then
                    Frat.PSet (A * (200 - 5) - i, A * (200 - 25) - j),
CLng((21 - k) * 1000 + ((200 * A - i) / (201 * A - j)) * 1000)
                End If
            End If
        Next
    Next
    Ciao = "Frat d6 " & Text1.Text & " " & Text2.Text & " " & Combo1.Text &
" " & Combo3.Text & ".bmp"
    If Combo2.Text = "Salva" Then SavePicture Frat.Image, Ciao
    Label1.Caption = "Ok"
End Sub
Private Sub Command7_Click()
     If Combo2.Text = "Salva" Then Frat.AutoRedraw = True Else
Frat.AutoRedraw = False
    Frat.Cls
    Frat.BackColor = &H400000
    Frat.ScaleMode = 3
    A = CInt(Combo1.Text)
    Label1.Caption = ""
    c1 = CDbl(Text1.Text)
    c2 = CDbl(Text2.Text)
    For i = 1 To (200 * A)
        xi = -2 + i / (50 * A)
        For j = 1 To (200 * A)
            yi = 2 - j / (50 * A)
            x = xi
            y = yi
            k = 1
            pbreak = False
            Do While (k <= 20) And (Not pbreak)
                k = k + 1
                xs = x * x - y * y + x * c1 - y * c2
                ys = 2 * x * y + x * c2 + y * c1
                x = xs
                y = ys
                z = x * x + y * y
                If z > 4 Then pbreak = True
            Loop
            If pbreak Then
                If Combo3.Text <> "3" Then Frat.PSet (i - 5 * A, j - 25 *
A), CLng(k * 1000 + (x / y) * 1000)
                If Combo3.Text <> "1" Then
                    Frat.PSet (A * (200 - 5) - i, A * (200 - 25) - j),
CLng((21 - k) * 1000 - (x / y) * 1000)
                End If
            End If
        Next
    Next
    Ciao = "Frat d7 " & Text1.Text & " " & Text2.Text & " " & Combo1.Text &
" " & Combo3.Text & ".bmp"
    If Combo2.Text = "Salva" Then SavePicture Frat.Image, Ciao
    Label1.Caption = "Ok"
End Sub
Private Sub Command8_Click()
     If Combo2.Text = "Salva" Then Frat.AutoRedraw = True Else
Frat.AutoRedraw = False
    Frat.Cls
    Frat.BackColor = &H400000
    Frat.ScaleMode = 3
    A = CInt(Combo1.Text)
    Label1.Caption = ""
    c1 = CDbl(Text1.Text)
    c2 = CDbl(Text2.Text)
    For i = 1 To (200 * A)
        xi = -2 + i / (50 * A)
        For j = 1 To (200 * A)
            yi = 2 - j / (50 * A)
            x = xi
            y = yi
            k = 1
            pbreak = False
            Do While (k <= 20) And (Not pbreak)
                k = k + 1
                xs = x * x - y * y + x * c1 - y * c2
                ys = 2 * x * y + x * c2 + y * c1
                x = xs
                y = ys
                z = x * x + y * y
                If z > 4 Then pbreak = True
            Loop
            If pbreak Then
                If Combo3.Text <> "3" Then Frat.PSet (i - 5 * A, j - 25 *
A), CLng(k * 500 + i * 500 + j * 500 + (i / j - 201 * A) * 500)
                If Combo3.Text <> "1" Then
                    Frat.PSet (A * (200 - 5) - i, A * (200 - 25) - j),
CLng((21 - k) * 500 + (200 * A - i) * 500 + (200 * A - j) * 500 + ((200 *
A - i) / (201 * A - j)) * 500)
                End If
            End If
        Next
    Next
    Ciao = "Frat d8 " & Text1.Text & " " & Text2.Text & " " & Combo1.Text &
" " & Combo3.Text & ".bmp"
    If Combo2.Text = "Salva" Then SavePicture Frat.Image, Ciao
    Label1.Caption = "Ok"
End Sub
Private Sub Command9_Click()
     If Combo2.Text = "Salva" Then Frat.AutoRedraw = True Else
Frat.AutoRedraw = False
    Frat.Cls
    Frat.BackColor = &H400000
    Frat.ScaleMode = 3
    A = CInt(Combo1.Text)
    Label1.Caption = ""
    c1 = CDbl(Text1.Text)
    c2 = CDbl(Text2.Text)
    For i = 1 To (200 * A)
        xi = -2 + i / (50 * A)
        For j = 1 To (200 * A)
            yi = 2 - j / (50 * A)
            x = xi
            y = yi
            k = 1
            pbreak = False
            Do While (k <= 20) And (Not pbreak)
                k = k + 1
                xs = x * x - y * y + x * c1 - y * c2
                ys = 2 * x * y + x * c2 + y * c1
                x = xs
                y = ys
                z = x * x + y * y
                If z > 4 Then pbreak = True
            Loop
            If pbreak Then
                If Combo3.Text <> "3" Then Frat.PSet (i - 5 * A, j - 25 *
A), CLng(k * 500 + x * 500 + y * 500 + (x / y) * 500)
                If Combo3.Text <> "1" Then
                    Frat.PSet (A * (200 - 5) - i, A * (200 - 25) - j),
CLng((21 - k) * 1000 - x * 500 - y * 500 - (x / y) * 1000)
                End If
            End If
        Next
    Next
    Ciao = "Frat d9 " & Text1.Text & " " & Text2.Text & " " & Combo1.Text &
" " & Combo3.Text & ".bmp"
    If Combo2.Text = "Salva" Then SavePicture Frat.Image, Ciao
    Label1.Caption = "Ok"
End Sub

 Inserire un case e scegliere il colore č bruttissimo
Si, lo č. Ti conviene fare un array ColoredaArrayColori() di 21 elementi che
contengono il valore del colore corrispondente al valore K. A questo punto
il colore corrente lo ottieni come ColoredaArrayColori(k)
Ciao
*Roby*

 fronte ad un grosso problema. Come impostare i colori.
Anch' io, tempo fa', mi sono dilettato a scrivere un programmino
per il calcolo delle funzioni frattali: come gia' ti e' stato
suggerito uso delle tavole di colori precalcolate, a diverso numero
di colori dipendentemente degli effetti che voglio ottenere.  Certi
frattali, infatti, sono bellissimi anche se disegnati con solo due
toni di grigio.
Il mio progettino e' disponibile sul Sito Comune, con il nome di
FracZn2C o anche su: 
http://www.flanguasco.org
   Vi puoi trovare
sia la creazione delle tavole colori sia la loro gestione.
Ciao e fatti vivo se desiderassi altre informazioni.
Franco

 adesso č andata da 200 a 835000. Chiedo consiglio a voi e vi posto una


:-D
E grazie a te per le 590 righe di "citazione"! :-(
-- 
Visita il sito comune del NG: 
http://www.it-lang-vb.net
Visit: 
http://www.hardwaretips.com

 :-D
Il QUOTING, per la miseria ! >:-|
Per due righe di risposta c'era bisogno di riportare TUTTO
il post, ca##o ?
G.

Ops... scusate!
Non ho fatto apposta!