iPhone - замена блока пикселей на изображение с другим блоком Pixls

StackOverflow https://stackoverflow.com/questions/4609132

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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"];

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top