我在相机覆盖图上有一系列图像。当我点击按钮时,我需要使用摄像机视图拍摄一个叠加图像的快照。但是当我在设备中启动时出现了以下错误。我搜索了一些我无法回答的现有代码。
错误:
[UIImage length]: unrecognized selector sent to instance 0x1d53b6b0 2013-04-02 11:27:18.748
ARimage[1166:907] *** Terminating app due to uncaught exception
'NSInvalidArgumentException', reason: '-[UIImage length]: unrecognized selector sent to instance 0x1d53b6b0'
数组叠加图像的代码:
NSArray *arrayOfImageFiles=[[NSArray alloc]initWithObjects:[UIImage imageNamed:@"img1.png"],
[UIImage imageNamed:@"img2.png"],
[UIImage imageNamed:@"img3.png"],
[UIImage imageNamed:@"img4.png"],
[UIImage imageNamed:@"img5.png"], nil];//array of images.
for(NSString * imageFileName in arrayOfImageFiles)//here you are getting string format but imageFileName is an image object
{
UIImage * overlay = [UIImage imageNamed: imageFileName];//here imageFileName is image simply give here UIImage * overlay=imageFileName;
if(overlay)
{
CGSize overlaySize = [overlay size];
[overlay drawInRect:CGRectMake(30 * xScaleFactor, 100 * yScaleFactor, overlaySize.width * xScaleFactor, overlaySize.height * yScaleFactor)];
} else {
NSLog( @"could not find an image named %@", imageFileName);
}
}
UIImage *combinedImage = UIGraphicsGetImageFromCurrentImageContext();
[self setStillImage:combinedImage];
UIGraphicsEndImageContext();
[[NSNotificationCenter defaultCenter] postNotificationName:kImageCapturedSuccessfully object:nil];
}];
}
捕获叠加图像以点击按钮:
- (void)ButtonPressed {
[self captureStillImageWithOverlay:[NSArray arrayWithObjects:[UIImage imageNamed:@"img1.png"],
[UIImage imageNamed:@"img2.png"],
[UIImage imageNamed:@"img3.png"],
[UIImage imageNamed:@"img4.png"],
[UIImage imageNamed:@"img5.png"], nil]];
}
图像显示在相机叠加视图中。当我单击按钮捕获叠加图像时,我收到错误。
答案 0 :(得分:0)
尝试这样,
NSArray *arrayOfImageFiles=[[NSArray alloc]initWithObjects:[UIImage imageNamed:@"img1.png"],
[UIImage imageNamed:@"img2.png"],
[UIImage imageNamed:@"img3.png"],
[UIImage imageNamed:@"img4.png"],
[UIImage imageNamed:@"img5.png"], nil];//array of images.
for(NSString * imageFileName in arrayOfImageFiles)//here you are getting string format but imageFileName is an image object
{
UIImage * overlay=(UIImage *)imageFileName;
if(overlay)
{
CGSize overlaySize = [overlay size];
[overlay drawInRect:CGRectMake(30 * xScaleFactor, 100 * yScaleFactor, overlaySize.width * xScaleFactor, overlaySize.height * yScaleFactor)];
} else {
NSLog( @"could not find an image named %@", imageFileName);
}
}
UIImage *combinedImage = UIGraphicsGetImageFromCurrentImageContext();
[self setStillImage:combinedImage];
UIGraphicsEndImageContext();
[[NSNotificationCenter defaultCenter] postNotificationName:kImageCapturedSuccessfully object:nil];
}];
}
答案 1 :(得分:0)
此for
声明:
for(NSString * imageFileName in arrayOfImageFiles)
毫无意义。 arrayOfImageFiles
中的对象是UIImage的实例,而不是NSString
。在这一行
UIImage * overlay = [UIImage imageNamed: imageFileName];
您将UIImage作为字符串参数传递,该参数永远不会起作用。
我认为您需要将代码更改为这样(使用新的数组初始化语法):
NSArray *arrayOfImageFileNames = @[@"img1.png", @"img2.png", @"img3.png", @"img4.png", @"img5.png"];
for (NSString* imageFileName in arrayOfImageFileNames)
{
// The rest as per your code
}