iPhone: как определить средний свет / темноту области UIImage

Мне нужно разместить метки с прозрачным фоном поверх UIImage с переменным содержимым. Читаемость будет значительно варьироваться в зависимости от соотношения между цветом текста метки и цветом / яркостью области изображения, отображаемой под этикеткой. Поскольку изображение будет постоянно меняться, цвет текста метки должен меняться синхронно.

Я нашел несколько методов определения цвет, воспринимаемая яркость и т. д. одного пикселя. Однако мне нужно довольно быстро (пока загружается представление) определить приблизительный воспринимаемый цвет / яркость области UIImage под рамкой UILabel. Я предполагаю, что мне также нужно будет измерить альфа, потому что один и тот же цвет / яркость выглядит по-разному при разных значениях альфа.

Есть ли способ рассчитать такое значение для площади? Сведусь ли я к простому суммированию пикселей? Если уж на то пошло, есть ли алгоритм для этого?

Я подумал о двух возможных подходах:

  1. Выполните некоторые операции «складывания», то есть объединение пикселей из одной половины области в другую половину. Затем повторяйте, пока не получу одно значение. Было бы это практично? Как бы вы логически скомбинировали пиксели, чтобы усреднить их воспринимаемый цвет / яркость?
  2. Выберите статистически значимое количество пикселей в области, а затем объедините их (каким-то образом), чтобы получить приблизительную оценку.

Я думаю, что в наши дни эта проблема часто возникает из-за того, что люди так любят настраивать фон. Похоже, что стоит потратить мое время, чтобы выделить категорию или класс, чтобы справиться с этим, а затем поделиться ими.


person TechZen    schedule 23.02.2010    source источник


Ответы (1)


Как насчет простого выделения текста таким образом, чтобы он отображался как на темном, так и на светлом фоне?

Так поступают и в других ситуациях, когда текст должен отображаться на фоне с неизвестным содержанием (например, фильмы с субтитрами).

person rh.    schedule 23.02.2010
comment
Не могли бы вы рассказать об этом подробнее? Вы имеете в виду добавить тень или что-то в этом роде? Я не знаю, как очертить текст. Текст на этикетках также может быть переменным, поэтому я не могу просто использовать изображение. Текст может быть довольно маленьким, поэтому важна ясность. - person TechZen; 24.02.2010
comment
Я не уверен, как это делается на реальном UILabel, но когда вы перейдете к вызовам рисования, вы можете использовать CGContextSetTextDrawingMode (ctx, kCGTextFillStroke), а затем установить CGContextSetRGBStrokeColor и CGContextSetRGBFillColor с помощью CGContextSetRGBFillColor, затем на два противоположных цвета текста, а затем на два противоположных цвета текста. для отображения. - person rh.; 24.02.2010
comment
Я попытаюсь. Это было бы проще, чем то, о чем я думаю сейчас. - person TechZen; 24.02.2010
comment
Удачи - дайте мне знать, как дела! :) - person rh.; 24.02.2010