tôi chỉ biết một cách chính xác để làm điều này - và đó là để gọi CGGetColorComponents()
. Tôi đã thử sử dụng của UIColor
, nhưng nó không hoạt động chính xác trên các màu xám. Vì vậy, đây là những gì tôi làm:
Đầu tiên, tôi có một đơn giản struct
cho phép tôi thao tác màu RGBA dễ dàng. Cấu trúc này hữu ích ở nơi khác để thực hiện tất cả các loại công cụ thao tác màu sắc như hiệu chỉnh gamma và màu trung bình.
typedef struct
{
CGFloat r; // Red component (0 <= r <= 1)
CGFloat g; // Green component (0 <= g <= 1)
CGFloat b; // Blue component (0 <= b <= 1)
CGFloat a; // Alpha/opacity component (0 <= a <= 1)
}
RGBA;
Sau đó, tôi có hàm trả về cấu trúc RGBA
cho UIColor
.
RGBA RGBAFromUIColor(UIColor *color)
{
return RGBAFromCGColor(color.CGColor);
}
Nó vượt qua 's CGColor
đến một chức năng cấp dưới UIColor
để làm việc nặng nhọc.
RGBA RGBAFromCGColor(CGColorRef color)
{
RGBA rgba;
CGColorSpaceRef color_space = CGColorGetColorSpace(color);
CGColorSpaceModel color_space_model = CGColorSpaceGetModel(color_space);
const CGFloat *color_components = CGColorGetComponents(color);
int color_component_count = CGColorGetNumberOfComponents(color);
switch (color_space_model)
{
case kCGColorSpaceModelMonochrome:
{
assert(color_component_count == 2);
rgba = (RGBA)
{
.r = color_components[0],
.g = color_components[0],
.b = color_components[0],
.a = color_components[1]
};
break;
}
case kCGColorSpaceModelRGB:
{
assert(color_component_count == 4);
rgba = (RGBA)
{
.r = color_components[0],
.g = color_components[1],
.b = color_components[2],
.a = color_components[3]
};
break;
}
default:
{
NSLog(@"Unsupported color space model %i", color_space_model);
rgba = (RGBA) { 0, 0, 0, 0 };
break;
}
}
return rgba;
}
Vì vậy, hoạt động này rất tốt cho màu sắc màu xám (như UIColor.whiteColor
, UIColor.blackColor
, UIColor.grayColor
, vv) cũng như bất kỳ màu đỏ/xanh/xanh/alpha màu. Tuy nhiên, nó sẽ không hoạt động với màu HSB.
Nguồn
2013-05-19 09:14:56
Cảm ơn. Tôi quyết định rằng vấn đề của tôi không có giá trị giải pháp này, và tôi chuyển sang [UIColor colotWithRGB] thứ, tôi nhận giá trị RBG từ http://foobarpig.com/iphone/uicolor-cheatsheet-color-list-conversion-from-and -to-rgb-values.html. – lstipakov
Cảm ơn. Vấn đề của tôi đáng giá chính xác giải pháp này! –
Lưu ý: Trong iOS 5, 'Ugetolor''s' -getRed: green: blue: alpha' chỉ hoạt động với các màu sử dụng vùng màu RGB. Nó bị hỏng cho màu xám. Họ đã sửa lỗi này trong iOS 6 chưa? –