2010-02-23 9 views
2

Je dois placer des étiquettes avec un arrière-plan transparent sur un UIImage à contenu variable. La lisibilité varie considérablement en fonction de la relation entre la couleur du texte de l'étiquette et la couleur/luminosité de la zone de l'image affichée sous l'étiquette. Étant donné que l'image change constamment, la couleur du texte de l'étiquette doit être synchronisée.iPhone: comment déterminer la moyenne de la lumière/obscurité d'une zone d'un UIImage

J'ai trouvé plusieurs techniques pour déterminer le color, perceived luminosity etc d'un seul pixel. Cependant, j'ai besoin de rapidement (pendant le chargement d'une vue) déterminer la couleur/luminosité perçue approximative d'une zone de l'UIImage sous le cadre de l'UILabel. Je suppose que je vais aussi avoir besoin de mesurer l'alpha parce que la même couleur/luminosité semble différente à différentes valeurs alpha.

Existe-t-il un moyen de calculer une telle valeur pour une zone? Serai-je réduit à simplement additionner des pixels? Si c'est le cas, existe-t-il un algorithme pour y parvenir?

J'ai pensé deux approches possibles:

  1. effectuer certaines opérations « pliage » à savoir combinant les pixels d'une moitié de la zone à l'autre moitié. Puis répétez jusqu'à ce que je reçois une seule valeur. Serait-ce pratique? Comment combiner logiquement les pixels pour obtenir la moyenne de leur couleur/luminosité perçue?
  2. Expérimentez un nombre statistiquement significatif de pixels dans la zone, puis combinez-les (en quelque sorte) pour obtenir une mesure approximative.

Je pense que ce problème se pose beaucoup ces jours-ci avec les gens étant tellement habitués à personnaliser les arrière-plans. On dirait quelque chose qui vaudrait le coup de mon temps pour frapper une catégorie ou une classe pour gérer cela et ensuite le partager.

Répondre

1

Qu'en est-il simplement de souligner votre texte de façon à ce qu'il apparaisse à la fois sur les arrière-plans sombres et clairs?

C'est ainsi qu'il est géré dans d'autres situations où le texte doit être affiché sur un fond avec un contenu inconnu (par exemple, des films avec sous-titres).

+0

Pourriez-vous développer là-dessus? Voulez-vous dire ajouter une ombre ou quelque chose? Je ne suis pas sûr de savoir comment décrire le texte. Le texte des étiquettes peut également être variable, donc je ne peux pas utiliser une image. Le texte pourrait être plutôt petit, donc la clarté est importante. – TechZen

+0

Je ne sais pas comment cela se fait sur un UILabel réel, mais quand vous descendez dans les appels de dessin, vous pouvez utiliser CGContextSetTextDrawingMode (ctx, kCGTextFillStroke), puis définir vos CGContextSetRGBStrokeColor et CGContextSetRGBFillColor à deux couleurs assez opposées, puis CGContextShowTextAtPoint avec le texte à afficher. –

+0

Je vais essayer. Ce serait plus simple que ce que je pense faire maintenant. – TechZen