2015-03-03 5 views
1

У меня есть изображение, которое я пытаюсь выполнить с поиском положения пикселей.Обнаружить цвета тонов после изменения размера изображения

Так что, если это слой 1000px х 1000px, то я вижу этот образ (я просто показать фрагмент изображения, я надеюсь, что это будет достаточно для понимания):

enter image description here

Но если я изменить размер моего изображения для пример 300px х 300px это выглядит следующим образом (также просто показать фрагмент изображения):

enter image description here

так как вы можете увидеть после того, как вниз проклейки мы имеем дополнительные пиксели не только фиолетовый и зеленый, но что-то как градиент между двумя цветами. Но я пишу программу, которая пытается определить положение пикселей для зеленого и фиолетового, поэтому я просто использую 2 цвета для поиска подходящей позиции. Без изменения размера моя программа обнаруживает это хорошо, но после изменения размера здесь возникает проблема с обнаружением соответствующего положения цвета.

В фотошопе, если вы используете, например, допуск 100, и снимите флажок с надписью с надписью «сглаживание», он работает хорошо и нашел правильное положение даже с градиентом.

Как можно реализовать переносимость в моем коде. Так, например, у меня есть зеленый цвет, который мне нужно сравнить со всеми цветами толерантности. И если пиксель 100 процентов терпимо к зеленому, программа должна предположить, что пиксель подключен к зеленому цвету.

Что я имею в виду. Например, у меня есть цвет RGB (0, 255, 0), и я хочу найти всю терпимость к нему. В этом случае для зеленого.

Или, например, если у меня есть RGB (100, 255, 50), тогда мне нужно найти для него все цвета допуска.

Я полагаю, что здесь должен быть диапазон, который я могу установить, и цвета для проверки цвета допуска.

Как я дополнительно использую необработанные данные для циклического переключения всех пикселей. Так что я могу получить RGBA:

  float red = (rawData[byteIndex]  * 1.0)/255.0; 
      float green = (rawData[byteIndex + 1] * 1.0)/255.0; 
      float blue = (rawData[byteIndex + 2] * 1.0)/255.0; 
      float alpha = (rawData[byteIndex + 3] * 1.0)/255.0; 

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

Here is also мой предыдущий вопрос как cycle пиксель.

+0

Какой алгоритм вы используете, чтобы изменить размер изображения? – holex

+0

@holex, я использую этот http://stackoverflow.com/questions/2658738/the-simplest-way-to-resize-an-uiimage, но нет, если есть какой-либо алгоритм для изменения размера с сохранением одинаковые цвета, мне не нужен градиент между кусками. –

ответ

3

Похоже, вы столкнулись с проблемой интерполяции здесь при изменении размера. Если вы отключите интерполяцию, вы не получите никаких новых цветов в свой образ.

UIGraphicsBeginImageContext(newSize); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetInterpolationQuality(context, kCGInterpolationNone); 
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; 
UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
+0

спасибо за ответ вот мой цикл, как я нашел положение и необходимый пиксель http://stackoverflow.com/questions/28609108/cycling-pixels-in-png-image-perfomance-issue Так что это просто сравнение цвета, но Мне нужно знать, как я могу найти все допустимые пиксели и сравнить, если нужно пиксель. Так что, как вы можете видеть, я просто сравниваю гексагонный цвет из своего словаря с пикселем, который я получаю от необработанных данных, но мне нужно вместо этого использовать не только шестнадцатеричный цвет, но и диапазон. –

+0

Я четко не понимаю ваш вопрос. Вы не просто пытаетесь изменить размер изображения? –

+0

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