जावा getRGB()
डिफ़ॉल्ट एसआरबीबी रंग अंतरिक्ष में रंग का प्रतिनिधित्व करने वाला एक पूर्णांक देता है (बिट्स 24-31 अल्फा हैं, 16-23 लाल हैं, 8-15 हरे हैं, 0-7 नीले हैं)।
UIColor
ऐसी पद्धति नहीं है, लेकिन आप को परिभाषित कर सकते अपनी खुद की:
extension UIColor {
func rgb() -> Int? {
var fRed : CGFloat = 0
var fGreen : CGFloat = 0
var fBlue : CGFloat = 0
var fAlpha: CGFloat = 0
if self.getRed(&fRed, green: &fGreen, blue: &fBlue, alpha: &fAlpha) {
let iRed = Int(fRed * 255.0)
let iGreen = Int(fGreen * 255.0)
let iBlue = Int(fBlue * 255.0)
let iAlpha = Int(fAlpha * 255.0)
// (Bits 24-31 are alpha, 16-23 are red, 8-15 are green, 0-7 are blue).
let rgb = (iAlpha << 24) + (iRed << 16) + (iGreen << 8) + iBlue
return rgb
} else {
// Could not extract RGBA components:
return nil
}
}
}
उपयोग:
let swiftColor = UIColor(red: 1, green: 165/255, blue: 0, alpha: 1)
if let rgb = swiftColor.rgb() {
print(rgb)
} else {
print("conversion failed")
}
ध्यान दें कि यह केवल तभी UIColor
एक में परिभाषित किया गया है काम करेंगे "आरजीबी-संगत" रंगस्थान (जैसे आरजीबी, एचएसबी या ग्रेस्केल)। यह विफल हो सकता है यदि रंग CIColor
या पैटर्न छवि से बनाया गया है, तो उस स्थिति में nil
वापस आ गया है।
टिप्पणी: @ vonox7 के रूप में देखा, दिए गए मान 32-बिट प्लेटफॉर्म पर नकारात्मक हो सकता है (जो भी जावा getRGB()
विधि के साथ मामला है)। यदि वह नहीं चाहता था, Int
UInt
या Int64
द्वारा प्रतिस्थापित करें।
स्रोत
2015-02-21 11:46:15
बहुत बहुत धन्यवाद। जो मैंने खोजा वह है। क्या आपके पास शायद वही पीछे है?(मैं तेजी से बहुत नया हूं) -> GetRed (iRGBValue: Int) -> Int? –
@ user1344545: मुझे यकीन नहीं है कि मैं आपके प्रश्न को सही तरीके से समझता हूं। आप घटक को सामान्य शिफ्ट + मास्क ऑपरेशंस के साथ आरजीबी मान से निकाल सकते हैं, उदाहरण के लिए 'लाल = (आरजीबी >> 16) और 0xFF' दें। लेकिन यदि आप मूल्यों को अलग से चाहते हैं, तो उपरोक्त विधि में iRed, iGreen, iBlue, iAlpha की गणना करना आसान होगा और उन्हें एक ही संख्या में संयोजित नहीं करना आसान होगा। –
आप सही समझ गए। लाल = (आरजीबी >> 16) और 0xFF है जो मैंने देखा था। आपको बहुत - बहुत धन्यवाद ! –