Tôi khá mới với mục tiêu c nhưng đã lập trình được một thời gian. Tôi bắt đầu tạo ra một chức năng mà sẽ chuyển đổi từ RGB sang HSL và ngược lại nhưng tôi cảm thấy nó quá dài và đi sai hướng. Có ai biết một cách đơn giản để thực hiện chuyển đổi này?Chuyển đổi từ RGB sang HSL với Mục tiêu C
Trả lời
Mất màu NSC trong SDK iPhone. Bạn có thể sử dụng tiện ích này để chuyển đổi từ RGB sang không gian HSL và lưng:
Bạn có thể sử dụng NSColor
, tôi nghĩ vậy.
CGFloat r, g, b, a, h, s, b, a2;
NSColor *c = [NSColor colorWithCalibratedRed:r green:g blue:b alpha:a];
[c getHue:&h saturation:&s brightness:&b alpha:&a2];
Ngày nghĩ thứ hai, tôi không biết nếu NSColor
có sẵn trong các khuôn khổ iPhone hay không - không phải là có một UIColor
? Dù sao tôi sẽ để lại câu trả lời này trong trường hợp ai đó tìm kiếm một giải pháp OS X kết thúc ở đây.
Bạn có thể thêm danh mục UIColor-HSVAdditions.h/.m vào ứng dụng của mình để thêm một bộ hoạt động vào UIColor để làm việc với màu sắc, độ bão hòa và giá trị. Xem http://bravobug.com/news/?p=448 và bài viết này ArsTechnica.
Đây là những gì tôi đang sử dụng:
static void RVNColorRGBtoHSL(CGFloat red, CGFloat green, CGFloat blue, CGFloat *hue, CGFloat *saturation, CGFloat *lightness)
{
CGFloat r = red/255.0f;
CGFloat g = green/255.0f;
CGFloat b = blue/255.0f;
CGFloat max = MAX(r, g);
max = MAX(max, b);
CGFloat min = MIN(r, g);
min = MIN(min, b);
CGFloat h;
CGFloat s;
CGFloat l = (max + min)/2.0f;
if (max == min) {
h = 0.0f;
s = 0.0f;
}
else {
CGFloat d = max - min;
s = l > 0.5f ? d/(2.0f - max - min) : d/(max + min);
if (max == r) {
h = (g - b)/d + (g < b ? 6.0f : 0.0f);
}
else if (max == g) {
h = (b - r)/d + 2.0f;
}
else if (max == b) {
h = (r - g)/d + 4.0f;
}
h /= 6.0f;
}
if (hue) {
*hue = roundf(h * 255.0f);
}
if (saturation) {
*saturation = roundf(s * 255.0f);
}
if (lightness) {
*lightness = roundf(l * 255.0f);
}
}
Và đây là làm thế nào để gọi nó là:
CGFloat h, s, l;
RVNColorRGBtoHSL(r, g, b,
&h, &s, &l);
Cảm ơn! Chạy nhanh hơn nhiều so với sử dụng 'NSColor'. – VinceFior
Cập nhật: Hàm này thực sự trả về các giá trị màu khác nhau hơn tôi nghĩ. Khi tôi sử dụng nó để chọn các dải màu khác nhau từ một bánh xe màu, nó nhảy xung quanh. Ngược lại, giải pháp sau quay quanh bánh xe màu như tôi mong đợi: http://stackoverflow.com/a/6930407/1976584 – VinceFior
- 1. Chuyển đổi từ RGB int sang Hex
- 2. Chuyển đổi & sang & trong Mục tiêu-C
- 3. Sửa YUV422 sang chuyển đổi RGB
- 4. Chuyển đổi hình ảnh sang một mảng RGB trong Javascript
- 5. Chuyển đổi Java thành mục tiêu C
- 6. Chuyển đổi từ C++ sang Java
- 7. Loại Chuyển đổi từ C sang Java
- 8. Sự cố khi chuyển đổi YV12 sang RGB qua GLSL
- 9. Chuyển đổi màu hex sang RGB và ngược lại
- 10. Chuyển đổi giá trị màu nguyên sang RGB
- 11. Chuyển đổi màu RGB sang màu ACI gần nhất trong C#
- 12. chuyển đổi ẩn của con trỏ gián tiếp sang con trỏ mục tiêu-c bằng ARC
- 13. Chuyển sang C++ 0x từ C++ 98
- 14. Điều chỉnh hình ảnh HSL trên GPU
- 15. C++ Bắt RGB từ hBitmap
- 16. Chuyển Biến Javascript thành Mục tiêu-C
- 17. Chuyển đổi hình ảnh từ RGB sang không gian màu HSV
- 18. Chuyển đổi C# sang PHP
- 19. imagemagick chuyển đổi CMYK pdf sang RGB jpeg hoặc PNG và preseerve màu
- 20. Mục tiêu-c HTML-> Màu RGB không chính xác trong UIColor
- 21. Có thể chuyển đổi mục tiêu-C trên NSString không?
- 22. chuyển đổi mục tiêu c cho NSString thành NSDecimalNumber
- 23. Mục tiêu-C Chuyển đổi NSData thành NSString
- 24. Chuyển đổi từ HBITMAP sang Jpeg hoặc Png trong C++
- 25. Chuyển YUV sang BGR hoặc RGB trong OpenCV
- 26. Chuyển đổi từ void * sang đối tượng trong C#
- 27. OpenCV hình ảnh chuyển đổi từ RGB để HSV
- 28. Chuyển đổi từ Mercurial sang Subversion
- 29. Chuyển đổi mã OpenCV từ C++ sang Java
- 30. Chuyển đổi DateAdd và mã Format từ VB6 sang C#
+1, mặc dù HSL không hoàn toàn giống HSB/HSV. Tuy nhiên, H và S cũng sẽ giống nhau. – Wevah
@Wevah, wikipedia nói rằng nó không được tiêu chuẩn hóa lắm, và rằng bất kỳ tên nào có thể đi với bất kỳ mô hình nào. Tôi không đủ của một chuyên gia để biết sự tinh tế mặc dù. –
Vâng, chúng là * loại * tiêu chuẩn. Hầu hết. Chủ yếu là nó chỉ là không may rằng các công cụ được xây dựng trong không xử lý HSL (ightness). :/Và nếu anh ấy thực sự muốn HSV/HSB, thì câu trả lời của bạn là hoàn hảo! – Wevah