iPhone - замена блока пикселей на изображении другим блоком пикселей - PullRequest
1 голос
/ 06 января 2011

Я хотел бы знать, может ли кто-нибудь указать мне правильное направление относительно того, какие рамки / методы использовать при замене блока пикселей на изображении другим блоком пикселей.

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

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

1 Ответ

1 голос
/ 06 января 2011

Хотя это может звучать как простой вопрос, сделать что-то подобное не так просто.Вам нужно много справочной информации, чтобы все заработало.Это также зависит от того, откуда исходит изображение и что вы хотите с ним сделать.

Я не приведу вам рабочий пример, но вот несколько указателей:

Чтение в изображении:

UIImage *img = [UIImage imageNamed:@"myimage.png"];
// make sure you added myimage.png to your project

Создание собственного «графического контекста» для рисования:

UIGraphicsBeginImageContext(CGSizeMake(480.0f, 320.0f)); // the size (width,height)
CGContextRef ctx = UIGraphicsGetCurrentContext();

Рисование изображения в вашем (текущем) контексте:

[img drawAtPoint:CGPointMake(0.0f, -480.0f)]; // (draws on current context)

Выполнениенекоторые другие рисунки:

CGContextBeginPath(ctx); // start a path
CGContextSetRGBStrokeColor(ctx,1,0,0,1); // red,green,blue,alpha with range 0-1
CGContextMoveToPoint(ctx,50,0); // move to beginning of path at point (50,0)
CGContextAddLineToPoint(ctx,100,100); // add a line to point (100,100)
CGContextStrokePath(ctx); // do the drawing

Преобразование растрового контекста в изображение снова:

UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();

А затем либо:

Показать изображение аудитории изв контроллере вида:

[self.view addSubview:[[[UIImageView alloc] initWithImage:resultImage] autorelease]];

Или напишите изображение в формате jpeg:

NSData *imagedata = UIImageJPEGRepresentation(img,0.8); // 0.8 = quality
[imagedata writeToFile:filename atomically:NO];

Или в формате PNG:

NSData *imagedata = UIImagePNGRepresentation(img);
[imagedata writeToFile:filename atomically:NO];

Для последних вам понадобитсяиметь имя файла, что тоже не так тривиально (учитывая среду телефона, в которой вы живете).Это еще одна тема, по которой вы найдете много, ищите такие вещи, как:

NSArray *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *filename = [[path elementAtIndex:0] stringByAppendingPathComponent:@"myimage.png"];

Это общий план, я мог допустить некоторые ошибки, но это должно помочь вам, по крайней мере.

...