[英]app crashes on image capture
我正在通过相机捕获图像。 然后,我移到下一个控制器,在其中显示捕获的图像。 我返回到捕获图像屏幕,此循环持续10到15次。 此后,当我尝试捕获图像时,应用程序会由于发出“内存不足警告”而崩溃。 这是代码:
- (IBAction) takePhoto:(id) sender
{
/*
tempControl *intermediate=[[tempControl alloc] initWithNibName:@"tempControl" bundle:nil];
[self.navigationController pushViewController:intermediate animated:YES];
[intermediate release];
*/
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
imagePickerController= [[UIImagePickerController alloc] init];
[imagePickerController setMediaTypes:[NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil]];
imagePickerController.delegate = self;
imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentModalViewController:imagePickerController animated:YES];
}
else{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Camera Alert" message:@"Device Lacks Camera" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
[alert release];
alert = nil;
}
}
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingImage:(UIImage *)image
editingInfo:(NSDictionary *)editingInfo{
[picker dismissModalViewControllerAnimated:NO];
[picker release];
picker =nil;
/*
cropReciept *recieptToCrop=[[cropReciept alloc] initWithNibName:@"cropReciept" bundle:nil];
[recieptToCrop setReciept:image];
[self.navigationController pushViewController:recieptToCrop animated:YES];
[recieptToCrop release];
*/
OCRDemoViewController *recieptToCrop=[[OCRDemoViewController alloc] initWithNibName:@"CropTestViewController" bundle:nil];
[recieptToCrop setImageToCrop:image];
if ([self.selectedTicketType isEqualToString:@"MAXI QuickPick"]) {
recieptToCrop.selectedValueOfTicket=50;
recieptToCrop.drawNumber=self.selectedDrawNumber;
}
else if ([self.selectedTicketType isEqualToString:@"JUMBO QuickPick"]) {
recieptToCrop.selectedValueOfTicket=36;
recieptToCrop.drawNumber=self.selectedDrawNumber;
}
else if ([self.selectedTicketType isEqualToString:@"MEGA QuickPick"]) {
recieptToCrop.selectedValueOfTicket=24;
recieptToCrop.drawNumber=self.selectedDrawNumber;
}
else if ([self.selectedTicketType isEqualToString:@"REGULAR QuickPick"]) {
recieptToCrop.selectedValueOfTicket=12;
recieptToCrop.drawNumber=self.selectedDrawNumber;
}
else if ([self.selectedTicketType isEqualToString:@"SUPER QuickPick"]) {
recieptToCrop.selectedValueOfTicket=18;
recieptToCrop.drawNumber=self.selectedDrawNumber;
}
[self.navigationController pushViewController:recieptToCrop animated:YES];
[recieptToCrop release];
recieptToCrop=nil;
}
不要在委托回调中释放选择器,而是在下一个运行循环中分派一个块来执行它(您也可以在0之后使用performSelector)。
还可以使用Instruments ObjectAlloc和Leaks来查看未分配的内容。
您需要调整图像大小然后使用它。从相机单击的图像约为 超过2 mb。尝试调整从相机拍摄的图像的大小,然后再使用它。 您需要做:-
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingImage:(UIImage *)image
editingInfo:(NSDictionary *)editingInfo{
UIGraphicsBeginImageContext(size);//640*920 or what ever you think appropriate
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[picker dismissModalViewControllerAnimated:NO];
[picker release];
picker =nil;
}
And now use finalImage instead of image
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.