У меня есть UIImage, я хочу изменить цвет его конкретного пикселя, скажем, 224 x 200-й пиксель. Как я могу это сделать? Можно ли это сделать? Заранее спасибо.iPhone: Как изменить цвет конкретного пикселя UIImage?
6
A
ответ
8
После долгого поиска в течение целого дня я получил точное решение, хотя нашел много, но никто из них не работал. Вот что у меня есть, она работает безупречно -:
// This method creates an image by changing individual pixels of an image. Color of pixel has been taken from an array of colours('avgRGBsOfPixel')
-(void)createTexture{
self.sampleImage = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"whitebg.jpg"]];
CGRect imageRect = CGRectMake(0, 0, self.sampleImage.image.size.width, self.sampleImage.image.size.height);
UIGraphicsBeginImageContext(sampleImage.image.size);
CGContextRef context = UIGraphicsGetCurrentContext();
//Save current status of graphics context
CGContextSaveGState(context);
CGContextDrawImage(context, imageRect, sampleImage.image.CGImage);
// And then just draw a point on it wherever you want like this:
// CGContextFillRect(context, CGRectMake(x,y,1,1));
//Fix error according to @gsempe's comment
int pixelCount =0;
for(int i = 0 ; i<sampleImage.image.size.width ; i++){
for(int j = 0 ; j<sampleImage.image.size.height ; j++){
pixelCount++;
int index = pixelCount/pixelCountForCalculatingAvgColor;
// NSLog(@"Index : %d", index);
if(index >= [avgRGBsOfPixel count]){
index = [avgRGBsOfPixel count] -1;
NSLog(@"Bad Index");
}
// if(pixelCount >9999){
// pixelCount = 9999;
// NSLog(@"Bad Index");
// }
UIColor *color = [avgRGBsOfPixel objectAtIndex:index];
float red ,green, blue ,alpha ;
[color getRed:&red green:&green blue:&blue alpha:&alpha];
CGContextSetRGBFillColor(context, red , green, blue , 1);
CGContextFillRect(context, CGRectMake(i,j,1,1));
}
}
// Then just save it to UIImage again:
CGContextRestoreGState(context);
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
[self.iv setImage:img];
}
0
Возможно использование основной графики. В коде link есть код для преобразования изображения в оттенок серого. Вы можете изменить его для своих нужд.
0
CGContextRef все это. Вы можете делать всевозможные магии с этим.
Here are some slides этот более простой использование.
Что такое значение pixelCountForCalculatingAvgColor и avgRGBsOfPixel? Его не компилирует .. –
Эй Привет, я не понял, где или на какой линии мы на самом деле устанавливаем/меняем цвет пикселя? Пожалуйста, объясните –
@Vipul J вы можете очистить это неопределенное или что это значение pixelCountForCalculatingAvgColor и значения массива avgRGBsOfPixel? –