rgb -> hex

Status
Niet open voor verdere reacties.

el_froggy

Gebruiker
Lid geworden
21 jun 2005
Berichten
114
Hey,
heb me eindelijk aan c++ gezet, en heb een vrij leuke tutorial gevonden op http://www.cplusplus.com/doc/tutorial/
nu wou ik even mijn reeds verworfen kennis benutten, en legde mezelf de volgende oefening op.

ik wil een programma schrijven dat de rgb waarde omzet naar hex waarden
ik vraag niet naar een oplossing, maar vraag naar welke berekeningen ik moet maken om die om te zetten.
is dat een bepaalde bewerking , of is er een functie voor in c++
 
Laatst bewerkt:
Ben je hier iets mee???


The secret to the whole thing is remembering that hexadecimal means 16.


To calculate hexadecimal colors:
Each color will have numerical values for the amounts of Red, Green and Blue that make it up. These numbers will range from 0 to 255 for each of the three.
All you have to do then - and I do mean all you have to do - is divide this number by 16.

So....

Given RGB values, where all three are 0-255 (0, 0, 0 being black and 255, 255, 255 being white), use the equation:

R/16 = x + y/16
G/16 = x' + y'/16
B/16 = x" + y"/16 (tech note: if you remember My Dear Aunt Sally from algebra class, you'll notice that y is divided by 16 before it's added to x. [Mult., Div., Add., Sub.])


This will give you a whole number, 0-15, for x, and a remainder, y, represented as a whole number, 0-15, over 16. *


*(if you're using a calculator, you will get a decimal for the remainder - multiply the decimal by 16 again to get a whole number. i.e. 76/16 = 4.75, or 4 + 3/4, or 4 + 12/16)
This will give you:

COLOR="# x y x' y' x" y" "
Now this is where it might get confusing, because you obviously need a single digit for x and y, yet each one could be two digits long!
Remember, however, that hexadecimal is a base16 numbering system.
Normally, in base10, we count all the way to 9 before we need to use double digits. In hexidecimal, we need to count all the way to 15 before we start using double digits. So what do we do after 9? Start using letters: 10 is A, 11 is B, and so on to 15 which is F.
For example:
with RGB values of 80, 6, 143,

80/16 = 5 + 0/16,
6/16 = 0 + 6/16, and
143/16 = 8 + 15/16;

translating this to hexadecimal, where our 10-15 become A-F, you get:

50068F

Also, with an RGB of 182, 0, 35, you would get:

182/16 = 11 + 6/16,
0/16 = 0 + 0,
35/16 = 2 + 3/16,

or
B60023.
 
@lollige
ben er helaas niet veel wijzer mee geworden,
het gaat hier namelijk over een hex->rgb editor, die gebruikt maakt van een javascript functie.

toch bedankt voor de moeite ;-)
groetjes, en succes met c++ ;-)
 
bedankt,
text is enorm handig
alleen heb ik geen idee hoe dit te vertalen in c++
tis te zeggen,
ik zou in feite mijn getal moeten splitsen in het aantal cijfers, en naargelang dat getal (min. 1 & max. 3) die berekening moeten doen.

ik veronderstel dat ik het omzetten van A,B,C,D,E,F kan doen via een switch.

dus is het vooral het eerste dat me dwarzit.

dit is de code waar ik tot geraakt ben.
het is goed moglijk dat er foutjes inzitten
Code:
//rgb to hex
//Kiran Van Ursel

#include <iostream>
using namespace std;

#define NEWLINE '\n'

 unsigned int r;    unsigned int b;    unsigned int g;

int convert(r,g,b)
{
//omzetten van rgb naar hex dmv x/16 + y/16 = R/16
int h;


}

int main()
{
   
    int hex;
    
    cout << "Welkom op de converter van Kiran Van Ursel" << NEWLINE;
    cout << "Deze zet de RGB waarden om, naar de Hexadecimale waarden." << NEWLINE;
    cout << "U vult de drie waarden afzonderlijk in, deze mogen niet hoger liggen dan 255," << NEWLINE;
    cout << "De hexadecimale code die u terug krijgt, kan u gebruiken in uw html of css code." << NEWLINE;
    cout << "***********************************************************************************" << NEWLINE;
    cout << NEWLINE;
    cout << "Geef de R waarde in (0-255): ";
    cin >> r;
    cout << "Geef nu de B waarde in (0-255): ";
    cin >> b;
    cout << "Geef tenslotte de G waarde op (0-255): ";
    cin >> g;
    cout << "***********************************************************************************" << NEWLINE;
    hex = convert(r,b,g);
    cout << "De Hexa-decimale code is: " << hex;

return 0;
}
 
el_froggy zei:
@lollige
ben er helaas niet veel wijzer mee geworden,
het gaat hier namelijk over een hex->rgb editor, die gebruikt maakt van een javascript functie.
sorry. ik heb er in de korte tijd niet op gelet. ik wist niet dat zo'n functie bestond, en dacht gewoon dat het een leuke berekening moest zijn.
 
Dit is een idelae voor de C operator << (bitwise shift)

Ik ga even uit van 32-bit's int's
Lees de gewenste waarden voor R, G en B in aparte int's.
Iedere waarde beslaat maximaal 8 bits.

Ik ga uit van de volgorde R G B
Van links naar rechts: eerste 8 bits leeg, volgende 8 bits R, volgende 8 bits G, dan laatste 8 bits B. Totaal 32 bits.

Samengestelde waarde RGB = (R << 16) + (G << 8) + B

Ofwel, de waarde van R 16 bits naar links, G 8 naar links en B niet verschuiven. Alles optellen en klaar.

Je kunt ook gewoon R * 256 * 256 + G * 256 + B uitrekenen. Zelfde resultaat (maar langzamer tenzij je een compiler hebt die heel goed is in optimaliseren)

En nu maar hopen dat ik uit mijn hoofd het sommetje goed gemaakt heb.

(Nu nog Nederlands leren... verworven alsjeblieft. Straks gaan mensen nog denken dat het echt met een f geschreven wordt.)

O, en als je dan het antwoord wilt afdrukken doe je gewoon printf("/x", RGB)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan