2013-04-02 3 views
0

У меня есть массив изображений на оверлете камеры. Когда я нажимаю кнопку, мне нужно сделать снимок одного наложения с изображением камеры. Но я получил следующую ошибку при запуске в устройстве. Я искал какой-то существующий код, я не могу получить ответ.'NSInvalidArgumentException', причина: '- [UIImage length]: непризнанный селектор отправлен в экземпляр 0x1d53b6b0'

Ошибка:

[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

один раз проверить это один UIImage * наложение = [UIImage imageNamed: ImageFileName]; в этом изображенииFileName, получающемся из массива, но в массиве вы уже добавляете объекты в качестве images.so здесь два распределения времени – Balu

+0

@Sunny: Я не получил вас. объясните ясно – Ram

+0

Я отредактировал ваш код, как только проверите его. – Balu

ответ

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];          

     }];             
     } 
+0

Снова получите ту же ошибку. Мне нужно сделать снимок с наложением. Я использовал AVFoundation framework. Проверьте, что моя кнопка нажимает код. Там также я устанавливаю [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]]; Правильно ли это? – Ram

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 
} 
+0

этот код правильно или неправильно для взятия наложения снимка - (ничтожной) ButtonPressed { [само captureStillImageWithOverlay: [NSArray arrayWithObjects: [UIImage imageNamed: @ "img1.png"], [UIImage imageNamed: @ "img2.png" ], [UIImage imageNamed: @ "img3.png"], [UIImage imageNamed: @ "img4.png"], [UIImage imageNamed: @ "img5.png"], nil]]; } – Ram

+0

Я не знаю. Ожидают ли методы массив строк или изображений? – JeremyP

Смежные вопросы