Java getRGB()
(16-23 8-15 0-7 mavi, yeşil, kırmızı, alfa olan bit 24-31) varsayılan sRGB renk uzayında renk gösteren bir tamsayı döndürür.
UIColor
böyle bir yöntemi yoktur, ancak filtreler oluşturarak kendi:
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
}
}
}
Kullanımı: UIColor
bir tanımlanan olması durumunda bu sadece çalışacağını
let swiftColor = UIColor(red: 1, green: 165/255, blue: 0, alpha: 1)
if let rgb = swiftColor.rgb() {
print(rgb)
} else {
print("conversion failed")
}
Not "RGB uyumlu" renk alanı (RGB, HSB veya GrayScale gibi). Renk CIColor
veya desen görüntüden oluşturulmuşsa başarısız olabilir, bu durumda nil
döndürülür.
Not: @ vonox7 fark olarak, dönen bir değer (ayrıca Java getRGB()
yöntemle durumda), 32-bit platformlarda negatif olabilir. Bu istenmiyorsa, Int
'u UInt
veya Int64
ile değiştirin. Martin R'ın cevap itibaren
Çok teşekkürler. Bu benim aradığım şey. Muhtemelen aynı sırtın var mı?(Hızlı bir şekilde yeniyim) -> getRed (iRGBValue: Int) -> Int? –
@ user1344545: Sorunuzu doğru anladığımdan emin değilim. Bileşenleri rgb değerinden basit shift + mask işlemleriyle, örneğin '' red red = (rgb >> 16) & 0xFF' ile çıkarabilirsiniz. Ancak, değerleri ayrı olarak istiyorsanız, yukarıdaki yöntemde olduğu gibi iRed, iGreen, iBlue, iAlpha'yı hesaplamak ve bunları tek bir sayı ile birleştirmek daha kolay olacaktır. –
Doğru anladınız. Kırmızıya bakalım = (rgb >> 16) & 0xFF aradığım şey. Çok teşekkür ederim ! –