1

我想知道是否有人可以指出我在用另一个像素块替换图像中的像素块时使用哪些框架/方法的正确方向。

例如,假设我有一个完全红色的简单图像,我认为我的像素块大小为 5x5 像素。现在每 3 个块我想用蓝色块(5x5 像素)替换第 3 个块,这样它会导致每 3 个红色块出现一个带有蓝色块的红色图像。

我找到了有关像素替换的信息,但我试图弄清楚如何确定和处理像素块。任何建议将不胜感激..任何代码都将是梦遗。

4

1 回答 1

1

尽管这听起来像是一个简单的问题,但要做到这一点并不容易。你需要很多背景信息才能让一切顺利进行。它还取决于图像的来源以及您想用它做什么。

我不会为您提供一个工作示例,但这里有一些提示:

读取图像:

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

这是一般大纲,我可能犯了一些错误,但这至少应该让你继续前进。

于 2011-01-05T21:21:46.820 回答