翻訳公式ImageIO(二)

5786 ワード

Image Sourceの作成と使用Image Sourceクラスは、データアクセスのタスクを抽象化し、元のデータを管理する必要がある必要性を排除します.1つのImage Sourceのオブジェクトは、1つ以上のピクチャ、サムネイル、各画像の属性および画像のファイルを含むことができる.画像データを使用すると、appはOS Xv 10で実行されます.4システムの後、Image Sourceは画像のデータをあなたのアプリケーションに移動するのに良い方法です.CGImageSourceを作成して現金化すると、CGImageSourceの方法を使用して、画像、サムネイル、本の香りのプロパティ、画像の他の情報を取得することができます.
イメージソースから画像を生成
最も一般的な機能の1つは、Image I/O Frameworkを使用してImage Sourceからピクチャを作成し、似たようなコードリスト2-1この例は、パス名に基づいてImage Sourceを作成し、ピクチャを抽出する方法を示しています.Image Sourceオブジェクトの作成に成功すると、画像のフォーマットがわかります.Image Sourceから画像を生成するとき.下書きを作成する必要があります.また、サムネイルを作成するかどうか、キャッシュを許可するかどうかなど、属相辞書を提供することもできます.CGImageSouce ReferenceCGImageProperties Refrenceを見てください.Image Sourceには複数の画像が含まれているので、下付き記号を作成する必要があります.Image Source fileの中に1つのピクチャしか含まれていない場合、0を伝えることができます.Image Sourceの中に何枚かのピクチャが含まれていることを見つけることができます.この方法を呼び出すことによって、CGImageSourceGetCountリスト2-1を呼び出すことができます.
- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *path = [[NSBundle mainBundle] pathForResource:@"huoche" ofType:@"png"];
    UIImage *image = [self getImageWithPath:path];
    UIImageView *imageView = [[UIImageView alloc]initWithImage:image];
    imageView.frame = CGRectMake(20, 20, 50, 50);
    [self.view addSubview:imageView];

}


- (UIImage *)getImageWithPath:(NSString *)imagePath {
    //   url          
    NSURL *fileURL = [NSURL fileURLWithPath:imagePath];
    //   ImageIO     C            Core Foundation, NSURL    
    CFURLRef fileCFURL = (__bridge CFURLRef)fileURL;
    
    NSDictionary *dic = @{(__bridge_transfer NSString *)kCGImageSourceShouldAllowFloat: @YES,
                          (__bridge_transfer NSString *)kCGImageSourceShouldCache: @YES};
    
    
    CFDictionaryRef options =(__bridge_retained CFDictionaryRef)dic;
    
    //CFURLRef url,         
    //CFDictionaryRef options。       source   。                 、    。
    //    CGImageProperties Reference
    CGImageSourceRef source = CGImageSourceCreateWithURL(fileCFURL, options);
    CFRelease(options);
    
    CGImageRef imageRef = CGImageSourceCreateImageAtIndex(source, 0, nil);
    CFRelease(source);

    if (!imageRef) {
        NSLog(@"Error");
        return  nil;
    }
    UIImage *image = [UIImage imageWithCGImage:imageRef];
    return image;
}

イメージソースからサムネイルを作成
多くのImage Source fileには、インデックスできるサムネイルが含まれています.サムネイルが存在しない場合は、Image Sourceを作成するときにオプションを指定してサムネイルを生成できます.また、サムネイルを生成する最大sizeを指定するか、サムネイルが反転するかどうかを指定することもできます.インベントリ2−2は、dataからImage Sourceを作成し、サムネイルに関する制約オプションを設定する方法を示す.を使用してインポートしたストロークVSラム速度のデータ点を示します.このキーワードkCGImageSourceCreateThumbnailWithTransformを使用して、サムネイルが回転または縮小されるべきときに画像リスト2-2に適応するように指定することができます.
-(UIImage *)getThumbnailImageWithData:(NSData *)imageData {
    
    NSDictionary *dic = @{(__bridge_transfer NSString *)kCGImageSourceShouldAllowFloat: @YES,
                          (__bridge_transfer NSString *)kCGImageSourceShouldCache: @YES,
                          (__bridge_transfer NSString *)kCGImageSourceCreateThumbnailFromImageIfAbsent: @YES,
                          (__bridge_transfer NSString *)kCGImageSourceThumbnailMaxPixelSize: [NSNumber numberWithInteger:20]};
    
    
    CFDictionaryRef options =(__bridge_retained CFDictionaryRef)dic;
    
    //CFURLRef url,         
    //CFDictionaryRef options。       source   。                 、    。
    //    CGImageProperties Reference
    CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)imageData, NULL);
    CFRelease(options);
    
    CGImageRef imageRef = CGImageSourceCreateThumbnailAtIndex(source, 0, options);
    CFRelease(source);
    
    if (!imageRef) {
        NSLog(@"Error");
        return  nil;
    }
    
    UIImage *image = [UIImage imageWithCGImage:imageRef];
    return image;

}

サムネイルでしか作成できないsizeはすべて幅=高さ
画像を逐次ロード
非常に大きな画像がある場合は、ネット上に画像をロードします.累計データのImage Sourceクラスを作成することができ、計算に基づいて画像を表示することができます.CFDataから画像データを徐々にロードするには、次のタスクを実行する必要があります.
  • は、画像データ
  • を積算するためにCFDataを作成する.
  • は、呼び出し方法Image Source
  • によって逐次CGImageSourceCreateIncrementalを作成する.
  • ピクチャデータをCFData
  • に追加
  • は、方法CGImageSourceUpdateDataを呼び出し、CFDataパラメータがピクチャ全体または一部のピクチャを含むかどうかを指定するために使用されるCFDataオブジェクトおよびブール値を送信する.いずれの場合も、データパラメータは、現在ピクチャデータ
  • に積算されているすべてのデータを含む必要がある.
  • 十分なデータが蓄積されている場合は、imageを作成して、この方法でCGImageSourceCreateImageAtIndexを作成して、画像の一部をレンダリングすることができます.その後彼を釈放した
  • CGImageSourceGetStatusAtIndexメソッドを呼び出すことで、完全部のデータを受信するときにチェックできます.メソッドがKCGImageSourceCompleteを返すと、データはすべてロード済みであることが示される.3と4の
  • が繰り返し実行されていない場合
  • リリースImage Sourceオブジェクト
  • - (UIImage *)getIncrementalImageWithData:(NSData *)imageData finish:(NSNumber*)isFinish {
        CFDataRef dataRef = (__bridge CFDataRef)imageData;
        
        CGImageSourceUpdateData(self.mySource, dataRef, (__bridge CFBooleanRef)isFinish);
        
        CGImageRef imageRef = CGImageSourceCreateImageAtIndex(self.mySource, 0, NULL);
        UIImage *image = [UIImage imageWithCGImage:imageRef];
        
        return image;
    }
    

    画像のプロパティを表示
    デジタルピクチャには、ピクチャサイズ、ピクチャ解像度、ピクチャ方向、ピクチャ色プロファイル、絞り、計算モード、焦点距離、作成時間、キーワード、タイトル、その他の情報など、豊富な情報が含まれています.これらの情報は画像の処理と編集に非常に有用であり,これらのデータが露出している場合にのみユーザのインタフェースである.方法CGImageSourceCopyPropertiesAtIndexは、ImageSourceの1つのピクチャの属性情報を検索し、辞書的に返すことができるが.しかし、この辞書を巡り、画像の属性の情報を調べ、表示するコードを作成する必要があります.