Я работаю над сшивкой изображения с помощью OpenCV. Я использую четыре изображения размером «720 × 960 пикселей». Из четырех изображений я использовал три изображения, которые будут сшиты при запуске приложения. и четвертый будет прошивать, когда я нажимаю на кнопку стежка. Работает нормально. Но проблема возникает, когда я меняю размер с «720 × 960 пикселей до 640 × 960 пикселей» из всех четырех изображений и снова я запускаю код после изменения размера изображений, три изображения были показаны так же, как я упоминал выше, но пока я нажимаю на кнопку стежка, откуда я должен сшить четвертое изображение, компилятор показывает сообщение в консоль, как упомянуто ниже
Не могу сшить изображения, код ошибки = 1
<Ошибка>: CGImageCreate: неверный размер изображения: 0 x 0.
Я использовал следующий код
В CVViewController.h
import <UIKit/UIKit.h>
@interface CVViewController : UIViewController
{
NSArray *arrayImgGlobal;
}
@property (weak, nonatomic) IBOutlet UIActivityIndicatorView* spinner;
@property (nonatomic, weak) IBOutlet UIScrollView* scrollView;
@end
В CVViewController.m
#import "CVViewController.h"#import "CVWrapper.h"
@interface CVViewController ()
@end
@implementation CVViewController
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSArray* imageArray = [NSArray arrayWithObjects:
[UIImage imageNamed:@"[email protected]"],
[UIImage imageNamed:@"[email protected]"],
[UIImage imageNamed:@"[email protected]"],
nil];
[self stitch:imageArray];
}
-(IBAction)onButtonStitch:(UIButton *)btn
{
[self onBtnStitchPressed:arrayImgGlobal];
}
-(void)onBtnStitchPressed:(NSArray *)imageArray
{
[self stitch:imageArray];
}
- (void) stitch : (NSArray *)imageArray
{
[self.spinner startAnimating];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIImage* stitchedImage = [CVWrapper processWithArray:imageArray];
dispatch_async(dispatch_get_main_queue(), ^{
NSLog (@"stitchedImage %@",stitchedImage);
for (UIImageView *imgView in [self.scrollView subviews]) {
[imgView removeFromSuperview];
}
UIImageView* imageView = [[UIImageView alloc] initWithImage:stitchedImage];
self.imageView = imageView;
[self.scrollView addSubview:self.imageView];
self.scrollView.backgroundColor = [UIColor blackColor];
self.scrollView.contentSize = self.imageView.bounds.size;
self.scrollView.maximumZoomScale = 4.0;
self.scrollView.minimumZoomScale = 0.5;
self.scrollView.contentOffset = CGPointMake(-(self.scrollView.bounds.size.width-self.imageView.bounds.size.width)/2, -(self.scrollView.bounds.size.height-self.imageView.bounds.size.height)/2);
NSLog (@"scrollview contentSize %@",NSStringFromCGSize(self.scrollView.contentSize));
[self.spinner stopAnimating];
NSArray *arrayImages = [NSArray arrayWithObjects:
stitchedImage,
[UIImage imageNamed:@"[email protected]"],
nil];
arrayImgGlobal = arrayImages;
});
});
}
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
return YES;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - scroll view delegate
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return self.imageView;
}
@end
Код, который я использовал в моем проекте Вот
Еще кое-что-
Я протестировал свой код вместе с кодом выше ссылки в симуляторе ios 7.0. пока я запускаю его в устройство, оно только что показало сообщение в консоли, о котором я упоминал выше.
Может кто-нибудь сказать, пожалуйста, где я могу пойти не так и как это исправить? Спасибо
Задача ещё не решена.
Других решений пока нет …