Toon posts:

[vb6] kleurcodes? RGB en long?

Pagina: 1
Acties:
  • 171 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Euj iedereen... Ik zit met een probleem. Ik wil gewoon een standaard commondialog voor colors oproepen, en dat gaat allemaal best. Hij retourneert een kleur (in long format), ook allemaal nog leuk. Maar nu wil mijn MSChart (een grafiekje dus) voor alle kleuren alleen maar rood, groen en blauw accepteren. Je kunt dus met mscharts alleen doen:
code:
1
mscharts1.title.vtfont.vtcolor.blue = RGB waarde

en zo door... Hoe zet ik nou de long waarde (is het een long waarde?) die de commondialog retourneert, om in een RGB waarde? Ik heb de hele MSDN doorgeploeterd, maar ik kan er niets over vinden (alleen van RGB naar long kan ik vinden, en dat is de functie RGB() )

Hellup!

Verwijderd

r= (CommonDialog1.Color And 255)
g= ((CommonDialog1.Color / 256) And 255)
b= ((CommonDialog1.Color / 65536) And 255)

Verwijderd

Topicstarter
We houden het simpel :( Hoe kom je hier in godsnaam op. Het klopt ongetwijfeld, maar waar had ik dit moeten vinden. en misschien een leukere vraag: waarom heeft ome Bill hier niet even een functie omheen geschreven?

Naja, wat maakt het ook uit, als het maar werkt :)

Verwijderd

gewoon uit de visual basic documentatie?
Using Direct Color Settings
Using the RGB function or the intrinsic constants to define color are indirect methods. They are indirect because Visual Basic interprets them into the single approach it uses to represent color. If you understand how colors are represented in Visual Basic, you can assign numbers to color properties and arguments that specify color directly. In most cases, its much easier to enter these numbers in hexadecimal.

The valid range for a normal RGB color is 0 to 16,777,215 (&HFFFFFF&). Each color setting (property or argument) is a 4-byte integer. The high byte of a number in this range equals 0. The lower 3 bytes, from least to most significant byte, determine the amount of red, green, and blue, respectively. The red, green, and blue components are each represented by a number between 0 and 255 (&HFF).

Consequently, you can specify a color as a hexadecimal number using this syntax:

&HBBGGRR&

The BB specifies the amount of blue, GG the amount of green, and RR the amount of red. Each of these fragments is a two-digit hexadecimal number from 00 to FF. The median value is 80. Thus, the following number specifies gray, which has the median amount of all three colors:

&H808080&

Setting the most significant bit to 1 changes the meaning of the color value: It no longer represents an RGB color, but an environment-wide color specified through the Windows Control Panel. The values that correspond to these system-wide colors range from &H80000000 to &H80000015.

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 22:40

Sponge

Serious Game Developer

Is in theorie gewoon een bitshift
code:
1
2
3
4
5
With CommonDialog
r= (.Color& And 255&)
g= ((.Color& \ 256&) And 255&)
b= ((.Color& \ 65536&) And 255&)
End With

Stukken sneller :9

Verwijderd

Op donderdag 28 maart 2002 20:46 schreef 41.6C.6D.61.72 het volgende:
Is in theorie gewoon een bitshift
Jah wtf dachten die lui bij microsoft toen ze de bitshift operator weglieten uit VB :?
Stukken sneller :9
90 miliseconden als je het 100.000x uitrekend..

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 22:40

Sponge

Serious Game Developer

Dat is veel in 'computer' tijd IMO..zeker als je bezig gaat met grote plaatjes waar je bijv een 800x600 al 480000 pixels bevat die een long waarde hebben die naar RGB omgezet moeten worden. We hebben het hier zelfs over 16bit, niet eens 32 waar ook nog de Alpha component bijkomt..

Verwijderd

Op donderdag 28 maart 2002 21:03 schreef 41.6C.6D.61.72 het volgende:
Dat is veel in 'computer' tijd IMO..
Als je snelheid nodig hebt, is de keuze voor vb een vrij slechte imho :)
We hebben het hier zelfs over 16bit, niet eens 32 waar ook nog de Alpha component bijkomt..
3 componenten van 8 bits is op mijn zakmachientje 24 bits...dunno hoe je bij 16 komt?! :?

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 22:40

Sponge

Serious Game Developer

Hmm, klopt. Maar dan nog... over die keuze van VB, VB is echt niet langzaam, alleen je moet gewoon alles "VB style'" doen :). Mijn Fractal planet generator gemaakt in VB deed slechts 3 seconden langer over iets dan de ASM dll versie ervan (Iets van VB:9, ASM:6)

Verwijderd

Topicstarter
--Foutje van moi---

Verwijderd

Leg aan de hand van een voorbeeld eens uit wat er niet klopt dan volgens jou?

Verwijderd

Topicstarter
Toch klopte er iets niet aan die eerste reply. Als ik dan groen en blauw 255 liet worden (in dat colorwindowtje), dan kregen ze in geconverteerde RGB waarde opeens de waarde 0!
Dit loste het probleem op:
code:
1
2
3
red = (.Color And 255)
green = ((.Color / 256) - 1 And 255)
blue = ((.Color / 65536) - 1 And 255)

Iemand enig idee hoe dit komt (en, ik ben absoluut niet wiskundig!)

Verwijderd

'k heb verkeerde slash gepakt waardoor de uitkomst van de deling 'n float is die afgerond gaat worden naar het dichts bij zijnde gehele getal.
code:
1
2
3
r= (CommonDialog1.Color And 255)
g= ((CommonDialog1.Color \ 256) And 255)
b= ((CommonDialog1.Color \ 65536) And 255)

werkt vast beter?

Verwijderd

Topicstarter
Hehe... kan gebeuren ;) Werkt nu inderdaad beter... Die oude code deed het verder wel, tenzij de ingevoerde waarde 255 was... dan ging ie weer terug naar 0! Harstikke bedankt!
Pagina: 1