Konwertuj z koloru kodu HEX na RGB w czysty c używając tylko biblioteki C (bez C++, szablonów itd.) Struktura RGB może być taka -> typedef struct RGB {double r; podwójne g; podwójne b; } RGB1; funkcja powinna zwrócić RGB1Konwertuj z koloru HEX na strukturę RGB w C
Odpowiedz
Wartość RGB może być zapisana jako wartość całkowita przez 0xRRGGBB. Przykłady:
- Czerwony: 0xFF0000
- Zielony: 0x00FF00
- Niebieski: 0x0000FF
00 jest sześciokątny dla dziesiętnych 0, a ff 255 0 odpowiada 0,0 255 do 1,0. (W rzeczywistości nie określiłeś zakresu, zakładam 0,0 do 1,0.)
Tak więc z powyższymi założeniami, musisz wyodrębnić każdy komponent i podzielić przez 255. Ponieważ brzmi to bardzo jak zadanie domowe pytanie, pokażę ci jak możesz zrobić czerwony komponent.
int hex = 0x123456;
c.r = ((hex >> 16) & 0xff)/255.0;
Każda cyfra heksagonalna zajmuje 4 bity. Przesunięcie w prawo o 16 bitów (aby przesunąć wszystko o 4 cyfry w prawo), aby 0xRRGGBB
stało się 0xRR
. Teraz masz czerwony komponent. (Tylko w przypadku, gdy niektóre dane są wyższe w liczbie całkowitej, można się tego pozbyć, maskując dane poprzez & 0xff
.)
Jeśli masz do czynienia z ciągiem znaków "#FFFFFF"
, musisz go najpierw przekonwertować do liczby całkowitej, aby powyższe działało.
Zakładając, że wartość hex jest 32-bitowy „int” typ i że używamy struct RGB opisane powyżej, to może zrobić coś takiego:
struct RGB colorConverter(int hexValue)
{
struct RGB rgbColor;
rgbColor.r = ((hexValue >> 16) & 0xFF)/255.0; // Extract the RR byte
rgbColor.g = ((hexValue >> 8) & 0xFF)/255.0; // Extract the GG byte
rgbColor.b = ((hexValue) & 0xFF)/255.0; // Extract the BB byte
return rgbColor;
}
Coś odrywając odpowiedź @konforce, prawda? – ubiquibacon
Nah. Był tam również kod do przetwarzania ciągów, ale punkt, o którym mówiono, był prawdopodobnie dobrym zadaniem domowym. W związku z tym zredagowałem tę odpowiedź tak, aby była bardziej podobna do tej, którą napisałem powyżej. – cubic1271
Należy hexValue być typu unsigned int? Myślę, że & 0xFF anuluje przesunięcie arytmetyczne, ale czy wartość 0xFFFFFF nie spowoduje przepełnienia, gdy zostanie przekazana? –
Chyba RGB mogą być przechowywane jako 0xRRGGBB w niektórych systemach, ale w Windows jest przechowywany jako 0xBBGGRR (patrz http://msdn.microsoft.com/en-us/library/windows/desktop/dd183449). Jak wspomniano w artykule, dostępne są makra GetRValue, GetGValue i GetBValue.
Jeśli kod szesnastkowy jest ciągiem znaków, można analizować go jak ten
char *str = "0000FF";
int r, g, b;
sscanf(str, "%02x%02x%02x", &r, &g, &b);
to wskazówki, a nie podwójne. Sprawdź również, czy sscanf
zwraca 3, czyli liczbę odczytanych elementów.
Świetna odpowiedź, prosta i działająca! –
- 1. Konwertuj HEX na najbliższy X11 Numer koloru
- 2. Konwertuj wartość koloru RGB na dziesiętną
- 3. Konwertuj wartość koloru RGB na szesnastkową
- 4. Konwertuj wartości RGB na nazwę koloru
- 5. Konwertuj wartość całkowitą koloru na RGB
- 6. CSS - RGB lub HEX dla koloru
- 7. Konwersja z int RGB, HEX
- 8. Konwertuj wartość koloru RGB na RGBA na 0.75 alpha
- 9. Konwertuj hex na float
- 10. Konwersja RGB hex wartości kolorów w PHP
- 11. C# Konwersja delphi TColor do koloru (Hex)
- 12. Konwertuj wartość RGB na HSV
- 13. Konwersja kodu koloru MS Access na Hex w C#
- 14. jak przekonwertować wartość koloru RGB na wartość szesnastkową w C++?
- 15. Konwertuj wartości RGBA na kod koloru szesnastkowego
- 16. Konwertuj RGB na czarno-biały w OpenCV
- 17. Konwertuj System.Drawing.Color na RGB i wartość heksadeci
- 18. Konwertuj wartość skali szarości na reprezentację RGB?
- 19. Konwertuj ciąg znaków szesnastkowych na kolor RGB
- 20. Chrome DevTools konwertuje wszystkie kolory HEX na RGB
- 21. Konwertuj ciąg znaków z kodami ASCII hex na znaki
- 22. Jak napisać wartość koloru RGB w JavaScript?
- 23. Konwertuj obraz do tablicy RGB w JavaScript
- 24. Konwertuj na 3-cyfrowy kod koloru heksadecymalnego
- 25. Konwersja koloru szesnastkowego na RGB i na odwrót
- 26. Tworzenie SolidColorBrush od wartości koloru hex
- 27. Konwertuj RGB na skalę szarości w wierszu polecenia ImageMagick
- 28. mogę wyłączyć Sass RGB -> Nazwa koloru
- 29. Konwertuj z binarnego na char w C
- 30. C++ Uzyskiwanie RGB z hBitmap
Nie jestem pewien, czy rozumiem pytanie. Uważam, że oznaczanie rzeczy jako kodu i/lub wstawianie znaków nowej linii w pytanie w strategicznych miejscach może być pomocne w ułatwianiu ludziom czytania (a zatem i odpowiedzi). – cubic1271