2

コードでアップルの自動拡張イメージを使用する必要があります。アップルが示した例を見つけましたが、機能させることができません。私は実際に何が間違っているのか分かりません。

Appleが推奨するものは次のとおりです。

これが私がやっていることです(imageFinalは強化したいUIImageです):

- (IBAction)enhance:(id)sender {
  CIImage *myImage;
  CIImage *image = [imageFinal CIImage];
  NSDictionary *options = [NSDictionary dictionaryWithObject:[[image properties]valueForKey:kCIImageProperties] forKey:CIDetectorImageOrientation];
  NSArray *adjustments = [myImage autoAdjustmentFiltersWithOptions:options];
  for (CIFilter *filter in adjustments){
    [filter setValue:myImage forKey:kCIInputImageKey];
    myImage = filter.outputImage;
}

}

私が得るエラーは次のとおりです:「const CFStringRef」(別名「const struct __CFString *const」)をタイプ「NSString *」のパラメーターに送信する互換性のないポインタータイプ

この kCGImagePropertyOrrientation の使い方が本当にわかりません。その単純な強化を適用したいだけです。

乾杯。

4

2 に答える 2

1

CFString は、NSString にブリッジされたフリーダイヤルです。したがって、キャストするだけで (NSString *)、機能します。しかし、私はまた、この不完全なサンプル コードの小さな部分に出くわし、少し改善できると考えました... 問題を解決するために目的の c カテゴリを作成しました。コード。

ヘッダ:

@interface UIImage (AutoEnhance)
- (UIImage *)autoEnhancedImage;
@end

実装:

#import <CoreImage/CoreImage.h>
#import <ImageIO/ImageIO.h>

@implementation UIImage (AutoEnhanced)
- (UIImage *)autoEnhancedImage
{
    CIImage *ciOriginal = self.CIImage;
    if(!ciOriginal) {
        ciOriginal = [[CIImage alloc] initWithCGImage:self.CGImage];
    }
    NSDictionary *options = @{ CIDetectorImageOrientation : @(self.CGImagePropertyOrientation)};
    NSArray *adjustments = [ciOriginal autoAdjustmentFiltersWithOptions:options];
    for (CIFilter *filter in adjustments) {
        [filter setValue:ciOriginal forKey:kCIInputImageKey];
        ciOriginal = filter.outputImage;
    }
    CIContext *context = [CIContext contextWithOptions:nil];
    CGImageRef cgImage = [context createCGImage:ciOriginal fromRect:ciOriginal.extent];
    UIImage *enhancedImage = [[UIImage alloc] initWithCGImage:cgImage];
    CGImageRelease(cgImage);
    return enhancedImage;
}

- (CGImagePropertyOrientation)CGImagePropertyOrientation
{
    switch (self.imageOrientation) {
        case UIImageOrientationUp:
            return kCGImagePropertyOrientationUp;
        case UIImageOrientationUpMirrored:
            return kCGImagePropertyOrientationUpMirrored;
        case UIImageOrientationDown:
            return kCGImagePropertyOrientationDown;
        case UIImageOrientationDownMirrored:
            return kCGImagePropertyOrientationDownMirrored;
        case UIImageOrientationLeftMirrored:
            return kCGImagePropertyOrientationLeftMirrored;
        case UIImageOrientationRight:
            return kCGImagePropertyOrientationRight;
        case UIImageOrientationRightMirrored:
            return kCGImagePropertyOrientationRightMirrored;
        case UIImageOrientationLeft:
            return kCGImagePropertyOrientationLeft;
    }
}
@end

それを使用するには、次のようにします。

UIImage *enhancedImage = [someUIImage autoEnhancedImage];
于 2015-03-24T18:18:07.803 に答える