Sadece C kütüphanesi kullanılarak (C++, şablonlar, vb. Olmadan) renkli HEX kodunu RGB'ye dönüştürün RGB yapısı şöyle olabilir:> typedef struct RGB {double r; çift g; çift b; RGB1; işlevi, RGB1HEX renginden RGB yapısına dönüştürün C
cevap
işlevini döndürmelidir. RGB değeri 0xRRGGBB aracılığıyla tamsayı olarak kaydedilebilir. Örnekler:
- Kırmızı: 0xFF0000
- Yeşil: 0x00ff00
- Mavi: ff 255. 0 0.0 ile 1.0 ve 255 tekabül ise
00 heks, ondalık 0 olduğu 0x0000FF. (Aslında aralığın ne olduğunu belirtmediniz. 0.0 ile 1.0 arasında bir değer olduğunu varsayalım.)
Yukarıdaki varsayımlarla birlikte, her bir bileşeni ayıklayıp 255'e bölünmeniz gerekir. soru, size sadece kırmızı bileşeni nasıl yapabileceğinizi göstereceğim.
int hex = 0x123456;
c.r = ((hex >> 16) & 0xff)/255.0;
Her onaltılı basamak 4 bit alır. Böylece 0xRRGGBB
'u 0xRR
haline getirmek için sağa 16 bit (4 haneyi sağa hareket ettirmek için) kaydırın. Şimdi kırmızı bileşen var. (Sadece tamsayıda daha yüksek bir veri olması durumunda, verileri & 0xff
aracılığıyla maskeleyerek kurtulursunuz.)
"#FFFFFF"
dizgisiyle ilgileniyorsanız, önce onu dönüştürmeniz gerekir. Yukarıdakilerin çalışması için bir tamsayıya.
sizin onaltılık değeri 32 bit 'int' türü olduğunu varsayarsak, ve biz RGB yapı yukarıda açıklanan kullandıkları zaman belki böyle bir şey yapmak:
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;
}
Cevap @konforce verdiğimiz cevap vermiyor değil mi? – ubiquibacon
Nah. Dize işlemede de orada kod vardı, ama bu konuda yapılmış bir not niteliği muhtemelen bir ev ödevi sorusuydu. Böylece, bu cevabı yukarıda yayınlanan bir konya benzetmek için düzenledim. – cubic1271
hexValue unsigned int türünde olmalıdır? Sanırım & 0xFF, aritmetik kaydırmayı iptal eder, ancak 0xFFFFFF değeri, aktarıldığında taşmaya neden olmaz mı? –
Ben RGB 0xRRGGBB olarak saklanabilir sanırım bazı sistemlerde, ancak Windows'da aslında 0xBBGGRR olarak saklanır (bkz. http://msdn.microsoft.com/en-us/library/windows/desktop/dd183449). Makale bahsettiği gibi, halihazırda mevcut olan GetRValue, GetGValue ve GetBValue makroları var. hex kodunu bir dize ise
, sen ints, değil çiftler için bu
char *str = "0000FF";
int r, g, b;
sscanf(str, "%02x%02x%02x", &r, &g, &b);
gibi ayrıştırma yapabilir. Ayrıca sscanf
öğesinin 3, okunan öğe sayısını döndürdüğünü kontrol edin.
Harika cevap, basit ve çalışıyor! –
- 1. CSS - rengin RGB veya HEX
- 2. RGB renk değerini, 0.75 alfadaki RGBA'ya dönüştürün
- 3. Altıgen renk dizesini RGB rengine dönüştürün
- 4. Bir hex dizgisini Java'da bir byte dönüştürün
- 5. C++ RSACryptoServiceProvider C++ dönüştürün
- 6. Bir ham negatif rgb int değerini bir 3 sayı rgb değerine dönüştürün
- 7. C# Dize dönüştürmek için hex
- 8. Python'da "küçük endian" hex dizesini IP adresine dönüştürün
- 9. rgb() ggplot2 ile birlikte R
- 10. HEX-NSString Objective-C nasıl dönüştürülür?
- 11. _fullpath Visual Studio'da Hex Değeri Verme C++
- 12. C neden hex değerlerimi yanlış yazdırıyor?
- 13. Objective-C Temel Onaltılık 16 Hex dönüşümü
- 14. C/C++'da RGB-> YUV dönüşümü nasıl yapılır?
- 15. RGB HSB Algoritma
- 16. Hex Sayısı
- 17. Aygıt çerçevesini nesnel c nesnesine dönüştürün c
- 18. Swift: NSDate'i C# ticks'a dönüştürün
- 19. Eşiği kullanarak benzer HEX renklerini bulma
- 20. Saturate_cast <uchar>'u C++ 'da C++' ya dönüştürün
- 21. "Arka plan rengi" rgb() biçimine nasıl dönüştürülür?
- 22. Chrome DevTools, tüm HEX Renklerini RGB'ye dönüştürür
- 23. C++ Dize olarak dizin yapısına göre Data-Url *
- 24. RGB - YCbCr Dönüştürme sorunları
- 25. Html Rgb rengi al
- 26. Arduino RGB LED sorunları
- 27. HBRUSH - RGB değeri
- 28. C++ tamsayı 8 char hex'e dönüştürün, ilk iki karakteri bırakın, böylece sadece 6 karakterlik bir hex ve
- 29. RGB renk değerini C++ 'da onaltılık bir değere nasıl dönüştürür?
- 30. android int hex dönüştürücü
Soruyu anladığımdan emin değilim. Soruları kod olarak işaretlemenin ve/veya stratejik yerlerin içine yeni satırlar eklemenin insanların sorularının daha kolay okunmasında (ve dolayısıyla cevaplanmasında) yardımcı olabileceğine inanıyorum. – cubic1271