使用 CIFilter 后传递 UIImage 的问题
Issues passing UIImage after using CIFilter
我有一个问题似乎无法解决或找不到任何与 SO 相关的帖子。我有一张图像,我正试图将其传递给函数,使用 CIFilter 进行编辑,然后传回结果以供显示。然而,当图像被传回时,它似乎已经被释放了,我不知道为什么。这是代码:
- (void)viewDidLoad {
[super viewDidLoad];
myImageView = [[UIImageView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UIImage *image = [UIImage imageNamed:@"testim.png"];
UIImage *imout;
[self editimage: image fpin:imout];
myImageView.image = imout;
[self.view addSubview:myImageView];
}
-(void) editimage:(UIImage *) image fpin:(UIImage *) img_new{
CIImage *ciImage = [CIImage imageWithCGImage:[image CGImage]];
CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"
keysAndValues: kCIInputImageKey, ciImage,
@"inputIntensity", @0.8, nil];
CIImage *outputImage = [filter outputImage];
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef cgimage = [context createCGImage:outputImage fromRect:[outputImage extent]];
img_new = [UIImage imageWithCGImage:cgimage];
CGImageRelease(cgimage);
}
任何人都可以阐明这一点吗?
您的代码的问题是实际上它根本不会改变您的输出图像。您的 editimage
方法将图像分配给 imout
.
的本地副本
您有两个选择:
选项 1
Return修改后的图片:
-(UIImage*) editimage:(UIImage *) image {
...
UIImage *newImage = [UIImage imageWithCGImage:cgimage];
CGImageRelease(cgimage);
return newImage
}
并且在你的 viewDidLoad 中:
UIImage *imout = [self editimage:image];
选项 2
如果你真的想坚持原来的模式,你可以将参考传递给你的图片:
-(void) editimage:(UIImage *) image fpin:(UIImage **) img_new {
...
*img_new = [UIImage imageWithCGImage:cgimage];
CGImageRelease(cgimage);
}
并且在你的 viewDidLoad 中:
[self editimage: image fpin:&imout];
我有一个问题似乎无法解决或找不到任何与 SO 相关的帖子。我有一张图像,我正试图将其传递给函数,使用 CIFilter 进行编辑,然后传回结果以供显示。然而,当图像被传回时,它似乎已经被释放了,我不知道为什么。这是代码:
- (void)viewDidLoad {
[super viewDidLoad];
myImageView = [[UIImageView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UIImage *image = [UIImage imageNamed:@"testim.png"];
UIImage *imout;
[self editimage: image fpin:imout];
myImageView.image = imout;
[self.view addSubview:myImageView];
}
-(void) editimage:(UIImage *) image fpin:(UIImage *) img_new{
CIImage *ciImage = [CIImage imageWithCGImage:[image CGImage]];
CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"
keysAndValues: kCIInputImageKey, ciImage,
@"inputIntensity", @0.8, nil];
CIImage *outputImage = [filter outputImage];
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef cgimage = [context createCGImage:outputImage fromRect:[outputImage extent]];
img_new = [UIImage imageWithCGImage:cgimage];
CGImageRelease(cgimage);
}
任何人都可以阐明这一点吗?
您的代码的问题是实际上它根本不会改变您的输出图像。您的 editimage
方法将图像分配给 imout
.
您有两个选择:
选项 1
Return修改后的图片:
-(UIImage*) editimage:(UIImage *) image {
...
UIImage *newImage = [UIImage imageWithCGImage:cgimage];
CGImageRelease(cgimage);
return newImage
}
并且在你的 viewDidLoad 中:
UIImage *imout = [self editimage:image];
选项 2
如果你真的想坚持原来的模式,你可以将参考传递给你的图片:
-(void) editimage:(UIImage *) image fpin:(UIImage **) img_new {
...
*img_new = [UIImage imageWithCGImage:cgimage];
CGImageRelease(cgimage);
}
并且在你的 viewDidLoad 中:
[self editimage: image fpin:&imout];