سؤال

أنا جديد تمامًا في الهدف C ولكن لقد تم برمجة لفترة من الوقت. بدأت في إنشاء وظيفة من شأنها تحويل من RGB إلى HSL والعودة مرة أخرى ، لكنني أشعر أنها طويلة جدًا وتوجه في الاتجاه الخاطئ. هل يعرف أي شخص طريقة بسيطة لأداء هذا التحويل؟

هل كانت مفيدة؟

المحلول

NSCOLOR مفقود في iPhone SDK. يمكنك استخدام هذه الأداة المساعدة للتحويل من RGB إلى مساحة HSL والعودة:

https://github.com/alessani/ColorConverter

نصائح أخرى

يمكنك استخدام NSColor, ، أظن.

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];

في الفكر الثاني ، لا أعرف إذا NSColor متوفر في أطر عمل iPhone أم لا - أليس كذلك UIColor؟ على أي حال ، سأترك هذه الإجابة في حالة انتهاء شخص ما يبحث عن حل OS X هنا.

هذا ما أستخدمه:

 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);
    }
}

وهنا كيف تسميها:

CGFloat h, s, l;
RVNColorRGBtoHSL(r, g, b,
                 &h, &s, &l);

يمكنك إضافة فئة UICOLOR-HSVADDITITIONS.H/.M إلى تطبيقك لإضافة مجموعة من العمليات إلى UICOLOR للعمل مع التشبع والقيمة. يرى http://bravobug.com/news/؟p=448 وهذاarstechnica مقال أيضا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top