我有以下代碼時丟失CIImage存儲器:目標C轉換成的UIImage
- (void)applySepiaFilter {
// Set previous image
NSData *buffer = [NSKeyedArchiver archivedDataWithRootObject: self.mainImage.image];
[_images push:[NSKeyedUnarchiver unarchiveObjectWithData: buffer]];
[_images push:[NSKeyedUnarchiver unarchiveObjectWithData: buffer]];
UIImage* u = [_images pop];
CIImage *image = [[CIImage alloc] initWithCGImage:u.CGImage];//[CIImage imageWithContentsOfURL:fileNameAndPath];
CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"
keysAndValues: kCIInputImageKey, image,
@"inputIntensity", @0.8, nil];
CIImage *outputImage = [filter outputImage];
//UIImage *newImage =
self.mainImage.image = [UIImage imageWithCIImage:outputImage];
}
凡_images是堆棧:
#import "Stack.h"
@implementation Stack{
NSMutableArray *stack;
}
-(id)init{
self = [super init];
if(self!=nil){
stack = [[NSMutableArray alloc] init];
}
return self;
}
-(void)push:(id)obj{
[stack addObject:obj];
}
-(id)pop{
id lastObj = [stack lastObject];
if (stack.count > 1) {
[stack removeLastObject];
}
return lastObj;
}
-(NSUInteger)size{
return stack.count;
}
@end
和self.mainImage是一個的UIImageView。
我第一次運行該方法,我得到所需的棕褐色過濾器。我相信它不正確地保存self.mainImage.image,因爲如果我在一行中運行該方法兩次,我得到一個self.mainImage.image的空白圖像,如果我第三次運行它,我得到一個SIGABRT錯誤。 我添加了一個斷點並開始瀏覽代碼。我注意到在方法的第一遍結束時,self.mainImage.image是一個CIImage *。這讓我感到困惑,因爲它應該是一個UIImage *(見圖)。 Screenshot during debug
另一件令我擔心的事情是我注意到緩衝區的大小明顯小於它應該在第二遍時的大小。這讓我相信圖像沒有被保存。同樣在第二遍時,調試器說* imge爲空。 (見截圖)Debugging screenshot during second pass
從 – dan