2012-03-13 4 views
0

오류 잡는 것이 가능하다 "ImageIO에서을 : JPEG 최대 이미지 크기는 65,500 픽셀 지원"나는 시도를 썼다캐치 ImageIO에서 : <ERROR>

, catch 블록하지 않았다 해당 method.However에 대한 캐치 섹션 ImageIO 예외를 잡아라 !!

아래의 코드 catch 블록은 절대로 catch하지 않습니다. 이것에 대한 도움은 감사하게 생각합니다.

-(void)captureToPhotoAlbum { 

    @try {  

     UIImage *image = [self glToUIImage]; //to get an image 

     if (image != nil) { 

      UIImageWriteToSavedPhotosAlbum(image, self, nil, nil); 
      [self eraseView]; 
      [self showAnAlert:@"Saved Successfully" Message:@""]; 

     } 
     else { 

      [self showAnAlert:@"Can't Save!!" Message:@"An error occurred "]; 
     } 



    } 

    @catch (NSException *ex) { 

     [self showAnAlert:@"Can't Save!!" Message:@"An error occurred"]; 
    } 
} 



-(UIImage *) glToUIImage { 

    UIImage *myImage = nil; 

    @try { 


     NSInteger myDataLength = 800 * 960 * 4; 

     // allocate array and read pixels into it. 
     GLubyte *buffer = (GLubyte *) malloc(myDataLength); 
     glReadPixels(0, 0, 800, 960, GL_RGBA, GL_UNSIGNED_BYTE, buffer); 

     // gl renders "upside down" so swap top to bottom into new array. 
     // there's gotta be a better way, but this works. 
     GLubyte *buffer2 = (GLubyte *) malloc(myDataLength); 

     for(int y = 0; y < 960; y++) 
     { 
      for(int x = 0; x < 800 * 4; x++) 
      { 
       buffer2[(959 - y) * 800 * 4 + x] = buffer[y * 4 * 800 + x]; 
      } 
     } 

     // make data provider with data. 
     CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer2, myDataLength, NULL); 

     // prep the ingredients 
     int bitsPerComponent = 8; 
     int bitsPerPixel = 32; 
     int bytesPerRow = 4 * 800; 
     CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); 
     CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault; 
     CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault; 

     // make the cgimage 
     CGImageRef imageRef = CGImageCreate(800, 444444444, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent); 

     // then make the uiimage from that 
     myImage = [UIImage imageWithCGImage:imageRef]; 
    } 
    @catch (NSException *ex) { 

     @throw; 
    } 
    @finally { 

     return myImage; 
    } 


} 
+0

오류 메시지를 수신 할 경우, 당신은 세 번째 인수로 콜백을 통과해야 어떤 라인이 예외를 제기하고 있습니까? –

답변

3

이 메서드는 예외를 throw하지 않으므로 catch 할 내용이 없습니다.

UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); 

후 다음과 같은 방법을 구현할 수, 이미지가 저장되면 호출됩니다 :

- (void)   image: (UIImage *) image 
didFinishSavingWithError: (NSError *) error 
      contextInfo: (void *) contextInfo; 
+0

정보 주셔서 감사합니다. –