ইউআইসিওলর থেকে আরজিবি মানগুলি কীভাবে পাবেন?


99

আমি নিম্নলিখিত কোড ব্যবহার করে একটি রঙ অবজেক্ট তৈরি করছি।

curView.backgroundColor = [[UIColor alloc] initWithHue:229 saturation:40 brightness:75 alpha:1];

আমি কীভাবে তৈরি রঙের বস্তু থেকে আরজিবি মানগুলি পুনরুদ্ধার করতে পারি?



4
কেবল একটি নোট, প্যারামিটারগুলি পদ্ধতিতে প্রবেশ করিয়ে দিয়েছিল: সংজ্ঞা: উজ্জ্বলতা: আলফা: সবগুলি 0.0 এবং 1.0 এর মধ্যে হওয়া উচিত।
geekinit

উত্তর:


84
const CGFloat *colors = CGColorGetComponents( curView.backgroundColor.CGColor );

এই লিঙ্কগুলি আরও বিশদ সরবরাহ করে:


নীচে উত্তর একটি মন্তব্য করা উচিত ছিল। উফ!
12'09

18
দ্রষ্টব্য: এটি কেবল আরজিবি স্পেসে রঙের জন্য কাজ করে। উদাহরণস্বরূপ, এটি আর ইউজির মধ্যে নেই বলে [ইউআইকলার হোয়াইট কালার] এ কাজ করবে না।
জেসন


4
যদি কারও কাছ থেকে মানগুলি পেতে সমস্যা হয় তবে colorsআপনি এমন কিছু লিখতে পারেন,CGFloat red = colors[0];
হেমাং

error: <EXPR>:3:1: error: 'CGColorGetComponents' has been replaced by property 'CGColor.components'
pkamb

119

আইওএস 5 এ আপনি ব্যবহার করতে পারেন:

CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha =0.0;
[multipliedColor getRed:&red green:&green blue:&blue alpha:&alpha];

এটি কেবল আইওএস 5.0 বা আরও নতুন ক্ষেত্রে সমর্থিত।
জন ট্রান্টভেইন

4
সতর্ক হোন যে এই পদ্ধতিটি কেবল তখনই সফল হবে যখন প্রারম্ভিক রঙ "একটি সামঞ্জস্যপূর্ণ রঙের জায়গাতে" থাকে, যা ডিভাইস / ওএসের উপর নির্ভর করে পরিবর্তিত হতে পারে। উদাহরণ হিসেবে বলা যায় আমি শুধু আবিষ্কার করেছি যে এ [UIColor darkGrayColor] এই কলিং ব্যর্থ হবে একটি আইপ্যাড 2 চলমান আইওএস 7 তবে একই রঙের একটি আইপ্যাড এয়ার চলমান আইওএস 8. উপর কাজ করে জরিমানা
devios1

@ ডিভিওএস 1 এটি প্রথমে রঙটি সিরিয়ালাইজ করে তারপরে এটির NSKeyedArchiverযেমন ডিজিট্রাইজেশন করে সমাধান করা যেতে পারে :multipliedColor = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject: multipliedColor]];
আলবার্ট রেনশো

41

সুইফট 3 এবং 4

আমি দেখতে পেয়েছি যে cgColor.com.com উপাদানগুলি সর্বদা 4 বর্ণের মান ফেরত দেয় না, তাই আমি এটিকে পরিবর্তন করেছি যাতে এটি একটি সিকোলার মোড়ক থেকে পেয়ে যায়

extension UIColor {
    var redValue: CGFloat{ return CIColor(color: self).red }
    var greenValue: CGFloat{ return CIColor(color: self).green }
    var blueValue: CGFloat{ return CIColor(color: self).blue }
    var alphaValue: CGFloat{ return CIColor(color: self).alpha }
}

সুইফট 2

extension UIColor {
    var red: CGFloat{ return CGColorGetComponents(self.CGColor)[0] }
    var green: CGFloat{ return CGColorGetComponents(self.CGColor)[1] }
    var blue: CGFloat{ return CGColorGetComponents(self.CGColor)[2] }
    var alpha: CGFloat{ return CGColorGetComponents(self.CGColor)[3] }
}

এটি সবচেয়ে কার্যকর উপায় নয় তাই আমি এটি ব্যবহার করতে যাব না যেখানে একটি দৃশ্য ক্রমাগত পুনরায় আঁকানো হবে।


11

আশা করি এটি সহায়ক হবে

CGFloat red, green, blue, alpha;

//Create a sample color

UIColor *redColor = [UIColor redColor];

//Call 

[redColor getRed: &red 
  green: &green
  blue: &blue 
  alpha: &alpha];
NSLog(@"red = %f. Green = %f. Blue = %f. Alpha = %f",
  red,
  green,
  blue,
  alpha);

7

স্রেফ এটির জন্য একটি বিভাগ তৈরি করা হয়েছে।

NSLog(@"%f", [UIColor blueColor].blue); // 1.000000

এর মতো কিছু যায়:

typedef enum { R, G, B, A } UIColorComponentIndices;

@implementation UIColor (EPPZKit)

-(CGFloat)red
{ return CGColorGetComponents(self.CGColor)[R]; }

-(CGFloat)green
{ return CGColorGetComponents(self.CGColor)[G]; }

-(CGFloat)blue
{ return CGColorGetComponents(self.CGColor)[B]; }

-(CGFloat)alpha
{ return CGColorGetComponents(self.CGColor)[A]; }

@end

eppz!kitআরও ইউআইকলর গুডির অংশ ।


5
const float* colors = CGColorGetComponents( curView.backgroundColor.CGColor );

ধন্যবাদ আমি যোগ করতে ছিল constলাইনের শুরুতে যেমন একটি সতর্কবার্তা উৎপাদিত হয়।


সুস্পষ্টভাবে ভাসতে সিজিফ্লোট কাস্ট করার চেষ্টা করার জন্য এটি কোনও সতর্কতা তৈরি করে নি? :)
ব্রডেন

5
 UIColor *color = [[UIColor greenColor] retain]; //line 1

//OR(You will have color variable either like line 1 or line 2)

color = curView.backgroundColor;//line 2
CGColorRef colorRef = [color CGColor];

int _countComponents = CGColorGetNumberOfComponents(colorRef);

if (_countComponents == 4) {
    const CGFloat *_components = CGColorGetComponents(colorRef);
    CGFloat red     = _components[0];
    CGFloat green = _components[1];
    CGFloat blue   = _components[2];
    CGFloat alpha = _components[3];

    NSLog(@"%f,%f,%f,%f",red,green,blue,alpha);
}

[color release];

2

ডেভিড রিসের উত্তর 3 এর সুইফ্ট সংস্করণ:

extension UIColor {

    var redValue: CGFloat{
        return cgColor.components! [0]
    }

    var greenValue: CGFloat{
        return cgColor.components! [1]
    }

    var blueValue: CGFloat{
        return cgColor.components! [2]
    }

    var alphaValue: CGFloat{
        return cgColor.components! [3]
    }
}

2

আপনি সিকোলার উপাদানগুলি ব্যবহার করতে পারেন (সুইফ্ট 5)

let ciColor = CIColor(color: backgroundColor)
let alpha = ciColor.alpha
let red = ciColor.red
let blue = ciColor.blue
let green = ciColor.green

এটি নন-আরজিবি রঙের জায়গার জন্যও কাজ করে


1

আইওএস 2.0 যেহেতু এ একটি ব্যক্তিগত উদাহরণস্বরূপ পদ্ধতি আছে UIColorবলা styleStringযা রঙ একজন আরজিবি বা RGBA স্ট্রিং উপস্থাপনা ফেরৎ, এমনকি আরজিবি স্থান বাহিরে whiteColor মত রং জন্য।

উদ্দেশ্য গ:

@interface UIColor (Private)

- (NSString *)styleString;

@end

// ...

[[UIColor whiteColor] styleString]; // rgb(255,255,255)
[[UIColor redColor] styleString]; // rgb(255,0,0)
[[UIColor lightTextColor] styleString]; // rgba(255,255,255,0.600000)

সুইফটে আপনি ইন্টারফেসটি প্রকাশের জন্য একটি ব্রিজিং শিরোলেখ ব্যবহার করতে পারেন। খাঁটি সুইফ্টের @objcসাহায্যে আপনার ব্যক্তিগত পদ্ধতি এবং প্রোটোকলের সাহায্যে একটি প্রোটোকল তৈরি করতে হবে unsafeBitCast UIColor:

@objc protocol  UIColorPrivate {
    func styleString() -> String
}

let white = UIColor.whiteColor()
let red = UIColor.redColor()
let lightTextColor = UIColor.lightTextColor()

let whitePrivate = unsafeBitCast(white, UIColorPrivate.self)
let redPrivate = unsafeBitCast(red, UIColorPrivate.self)
let lightTextColorPrivate = unsafeBitCast(lightTextColor, UIColorPrivate.self)

whitePrivate.styleString() // rgb(255,255,255)
redPrivate.styleString() // rgb(255,0,0)
lightTextColorPrivate.styleString() // rgba(255,255,255,0.600000)

1

শীর্ষে ভোট দেওয়া উত্তর পুরানো:

ত্রুটি:: 3: 1: ত্রুটি: 'সিজি কালারগেটকম্পোন্টস' সম্পত্তি 'সিজি কলর ডট কম অংশ' দ্বারা প্রতিস্থাপন করা হয়েছে

পরিবর্তে, ব্যবহার করুন

myUIColor.cgColor.components


4
চলুন রঙ = myUIColor.cgColor.com অংশ উপাদানগুলি r = রঙ দিন! [0] আসুন g = রঙ! [1] যাক b = রঙ! [2]
গুরজিন্দর সিংহ

0

আমি UITableViewStyle"UITableViewStyleGrouped" এর পটভূমি রঙটি পেতে চাইলে viewDidAppear:পদ্ধতিটিতে আমি কোডটি যুক্ত করেছি:

NSLog(@"%@", self.tableView.backgroundView.backgroundColor);

এটি আমার প্রত্যাশা মতো করেছিল এবং লগটি ফিরিয়ে দিয়েছে:

UIDeviceRGBColorSpace 0.937255 0.937255 0.956863 1

সুতরাং সংক্ষেপে শুধু টাইপ করুন NSLog(@"%@", [UIColor whateverColor]);


0

HandyUIKit ব্যবহার করা এটি সত্যই সহজ করে তোলে :

import HandyUIKit    

let color = UIColor(red: 0.1, green: 0.2, blue: 0.3, alpha: 0.4)

// get any of the rgba values
color.rgba.red    // => 0.1
color.rgba.green  // => 0.2
color.rgba.blue   // => 0.3
color.rgba.alpha  // => 0.4

মান পেতেhsba একই ধরণের বিকল্প রয়েছে :

let color = UIColor(hue: 0.1, saturation: 0.2, brightness: 0.3, alpha: 0.4)

// you can get any of the hsba values, too
color.hsba.hue         // => 0.1
color.hsba.saturation  // => 0.2
color.hsba.brightness  // => 0.3
color.hsba.alpha       // => 0.4

কেবল এটি কার্থেজ ব্যবহার করে ইনস্টল করুন এবং আপনি যেতে ভাল।

আমি আসা করি এটা সাহায্য করবে!


0

আমি এবং অন্যান্য রঙ নিয়ন্ত্রণের জন্য কিছু দরকারী ম্যাক্রো তৈরি করেছি:

আপনার ক্ষেত্রে আপনি কেবল ব্যবহার করতে হবে

getRGBA(myColor, red, green, blue, alpha);

NSLog(@"Red Value: %f", red);
NSLog(@"Blue Value: %f", green);
NSLog(@"Green Value: %f", blue);

ম্যাক্রোস:

#define rgba(r,g,b,a) [UIColor colorWithRed:((float)(r))/255.0f green:((float)(g))/255.0f blue:((float)(b))/255.0f alpha:a]
#define rgb(r,g,b) rgba(r, g, b, 1.0f)

#define rgbaf(r,g,b,a) [UIColor colorWithRed:(r) green:(g) blue:(b) alpha:a]
#define rgbf(r,g,b) rgbaf(r, g, b, 1.0f)

#define rgba_fromColor(__color, __r, __g, __b, __a) \
CGFloat __r, __g, __b, __a;\
UIColor *__unpackedColor = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:__color]];/*Bring system colors into compatible color-space (e.g. DarkGrayColor)*/\
[__unpackedColor getRed:&__r green:&__g blue:&__b alpha:&__a];
#define getRGBA(__color, __r, __g, __b, __a) hsba_fromColor(__color, __r, __g, __b, __a)

#define getRed(__color)  (\
(^float (void){\
rgba_fromColor(__color, r, g, b, a);\
return r;\
})()\
)

#define getGreen(__color)  (\
(^float (void){\
rgba_fromColor(__color, r, g, b, a);\
return g;\
})()\
)

#define getBlue(__color)  (\
(^float (void){\
rgba_fromColor(__color, r, g, b, a);\
return b;\
})()\
)

#define getAlpha(__color)  (\
(^float (void){\
rgba_fromColor(__color, r, g, b, a);\
return a;\
})()\
)










#define hsba(h,s,b,a) [UIColor colorWithHue:((float)(h))/360.0f saturation:((float)(s))/100.0f brightness:((float)(b))/100.0f alpha:a]
#define hsb(h,s,b) hsba(h, s, b, 1.0f)

#define hsbaf(h,s,b,a) [UIColor colorWithHue:(h) saturation:(s) brightness:(b) alpha:a]
#define hsbf(h,s,b) rgbaf(h, s, b, 1.0f)

#define hsba_fromColor(__color, __h, __s, __b, __a) \
CGFloat __h, __s, __b, __a;\
UIColor *__unpackedColor = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:__color]];/*Bring system colors into compatible color-space (e.g. DarkGrayColor)*/\
[__unpackedColor getHue:&__h saturation:&__s brightness:&__b alpha:&__a];
#define getHSBA(__color, __h, __s, __b, __a) rgba_fromColor(__color, __h, __s, __b, __a)

#define getHue(__color)  (\
(^float (void){\
hsba_fromColor(__color, h, s, b, a);\
return h;\
})()\
)

#define getSaturation(__color)  (\
(^float (void){\
hsba_fromColor(__color, h, s, b, a);\
return s;\
})()\
)

#define getBrightness(__color)  (\
(^float (void){\
hsba_fromColor(__color, h, s, b, a);\
return b;\
})()\
)

/*
///already defined in RGBA macros
#define getAlpha(__color)  (\
(^float (void){\
hsba_fromColor(__color, h, s, b, a);\
return a;\
})()\
)
*/

-5

আপনার ইউআইকিঅলরটি এটির মতো সেট করুন

UIColor.FromRGB(128, 179, 255)

এটি জামারিন আইওএসের জন্য ... তবে নিশ্চিতভাবেই দ্রুতগতিতে এই জাতীয় পদ্ধতি রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.