Domanda

Ho la mia funzione:

-(void)rgbToHSBWithR:(float)red G:(float)green B:(float)blue {

float brightness = red * 0.3 + green * 0.59 + blue * 0.11; // found in stackoverflow
NSLog(@"%f",brightness);
}

E non funziona per me.

Ad esempio: R: 84 G: 67 B: 73. Restituzione della funzione 72.760002. In Photoshop la luminosità per questo colore è del 33%. Cosa c'è che non va?

Grazie.

È stato utile?

Soluzione

Uso UIColor o NSColor:

-(void)rgbToHSBWithR:(float)red G:(float)green B:(float)blue {
    // assuming values are in 0 - 1 range, if they are byte representations, divide them by 255
    UIColor *color = [UIColor colorWithRed:red green:green blue:blue alpha:1];

    float h, s, b;
    if ([color getHue:&h saturation:&s brightness:&b alpha:NULL])
    {
        // h, s, & b now contain what you need
    }
}

Altri suggerimenti

I tuoi valori RGB vanno da 0 a 255, non da 0 a 99 - devi prima dividerli se vuoi finire con una percentuale:

float brightness = (red / 255.0) * 0.3 + (green / 255.0) * 0.59 + (blue / 255.0) * 0.11;

Inoltre, non esiste una singola conversione tra i valori di "luminosità" e RGB - Photoshop potrebbe usare una formula diversa da quella. Se vuoi saperne di più, consiglio il "FAQ gamma" e "FAQ di colore" di Charles Poynton.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top