Поймать ошибку, если файл не изображение - PullRequest
0 голосов
/ 03 февраля 2012

Есть ли возможность проверить, является ли файл в каталоге "Documents" изображением png?

Мое приложение загружает некоторые PNG-файлы с сервера. Затем приложение отображает изображение в градациях серого из PNG. Если что-то пошло не так на стороне сервера или в связи, и png-файл поврежден или отсутствует файл PNG, рендеринг в оттенках серого приводит к сбою всего приложения.

Все, что я сейчас делаю, это загружаю файл из каталога Documents в объект UIImage через:

UIImage *myImage = [[UIImage alloc] initWithContentsOfFile:[myobject.localFolder stringByAppendingPathComponent:@"thumbnail.png"]]

Затем я вызываю метод для преобразования изображения в оттенки серого с этим UIImage. Это функция, которую я использую для визуализации изображения в оттенках серого:

- (UIImage *)convertImageToGrayScale:(UIImage *)image
{

// Create image rectangle with current image width/height
CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);
NSLog(@"convertImageToGrayScale: image.size.width: %f image.size.height: %f", image.size.width, image.size.height);
// Grayscale color space
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();

// Create bitmap content with current image size and grayscale colorspace
CGContextRef context = CGBitmapContextCreate(nil, image.size.width, image.size.height, 8, 0, colorSpace, kCGImageAlphaNone);

// Draw image into current context, with specified rectangle
// using previously defined context (with grayscale colorspace)
CGContextDrawImage(context, imageRect, [image CGImage]);

// Create bitmap image info from pixel data in current context
CGImageRef imageRef = CGBitmapContextCreateImage(context);

// Create a new UIImage object  
UIImage *newImage = [UIImage imageWithCGImage:imageRef];

// Release colorspace, context and bitmap information
CGColorSpaceRelease(colorSpace);
CGContextRelease(context);
CFRelease(imageRef);

// Return the new grayscale image
return newImage;
}

1 Ответ

4 голосов
/ 03 февраля 2012

Это достаточно просто, учитывая ваш код:

UIImage *myImage = [[UIImage alloc] initWithContentsOfFile:[myobject.localFolder stringByAppendingPathComponent:@"thumbnail.png"]];

if (myImage)
{
    UIImage *grayImage = [self convertToGrayscale:myImage];
}
else
{
    // notify the user that the file is corrupt.
}

Это работает, потому что, согласно документации , -initWithContentsOfFile: вернет ноль, если не смог создатьизображение по любой причине (поврежденный файл, файл не найден и т. д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...