我想知道是否有人可以指出我在哪些框架/方法方面正确的方向 在用另一个像素块替换图像中的像素块时使用。
例如,假设我有一个完全红色的简单图像,我认为我的像素块大小为5x5 像素。现在每隔3个块,我想用蓝色块(5x5像素)替换第3个块 这将导致红色图像,每3个红色块出现蓝色块。
我找到了有关像素替换的信息,但我正在试图弄清楚如何确定和处理像素块。任何建议都将受到赞赏..任何代码将是一个湿的梦想。
答案 0 :(得分: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"];
这是一般大纲,我可能会犯一些错误,但这至少可以帮助你。