iPhone-用另一块像素替换图像中的一块像素

iPhone-用另一块像素替换图像中的一块像素,iphone,image,image-processing,block,pixel,Iphone,Image,Image Processing,Block,Pixel,我想知道是否有人能为我指出关于什么框架/方法的正确方向 用另一个像素块替换图像中的像素块时使用 例如,假设我有一个简单的彩色全红图像,我认为我的像素块大小为5x5。 像素。现在每3个块我想用蓝色块(5x5像素)替换第3个块 这将导致每3个红色块出现一个带有蓝色块的红色图像 我已经找到了关于像素替换的信息,但我正试图找出如何确定和处理像素块。如有任何意见,将不胜感激。。任何代码都将是一场噩梦 虽然这听起来像一个简单的问题,但要做到这一点并不容易。你需要大量的背景资料才能使一切顺利进行。这还取决于图

我想知道是否有人能为我指出关于什么框架/方法的正确方向 用另一个像素块替换图像中的像素块时使用

例如,假设我有一个简单的彩色全红图像,我认为我的像素块大小为5x5。 像素。现在每3个块我想用蓝色块(5x5像素)替换第3个块 这将导致每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();
将图像绘制到(当前)上下文中:

做一些其他的绘画:

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

这是一个大致的大纲,我可能犯了一些错误,但这至少可以让你继续学习。

虽然这听起来像是一个简单的问题,但要做到这一点并不容易。你需要大量的背景资料才能使一切顺利进行。这还取决于图像来自何处,以及您希望如何处理它

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

在图像中阅读:

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();
将图像绘制到(当前)上下文中:

做一些其他的绘画:

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

这是大致的轮廓,我可能会犯一些错误,但这至少可以让您继续。

像素在哪里?您正在处理的图像文件,或在屏幕上的实时视图中?像素在哪里?您正在处理的图像文件,或在屏幕上的实时视图中?进一步阅读:和许多其他apple文档。因此,实际的像素块是使用以下内容创建的:UIGraphicsBeginImageContext(CGSizeMake(480.0f,320.0f));CGContextRef ctx=UIGraphicsGetCurrentContext()?嗯,那是一种方式。另一种方法是从位图上下文开始,使用
CGContextRef ctx=CGBitmapContextCreate(基地址、宽度、高度、8、字节数、颜色空间、kCGBitmapByteOrder32Little | KCGimageAlphaPremultipledFirst)但正如您所看到的,这需要更多的努力(您需要分配内存并确定参数),但这使得您可以在内存中的像素级别进行实际编辑。然后您可以
CGImageRef cgimage=CGBitmapContextCreateImage(ctx)
获取
cgimage
,您可以使用它创建
UIImage
。谢谢。这真的很有帮助,也是一个很好的答案。进一步阅读:和许多其他苹果文档。因此,实际的像素块是用以下内容创建的:UIGraphicsBeginImageContext(CGSizeMake(480.0f,320.0f));CGContextRef ctx=UIGraphicsGetCurrentContext()?嗯,那是一种方式。另一种方法是从位图上下文开始,使用
CGContextRef ctx=CGBitmapContextCreate(基地址、宽度、高度、8、字节数、颜色空间、kCGBitmapByteOrder32Little | KCGimageAlphaPremultipledFirst)但正如您所看到的,这需要更多的努力(您需要分配内存并确定参数),但这使得您可以在内存中的像素级别进行实际编辑。然后您可以
CGImageRef cgimage=CGBitmapContextCreateImage(ctx)
获取
cgimage
,您可以使用它创建
UIImage
。谢谢。这真的很有帮助,也是一个很好的答案。