2012-03-04 18 views
2

私が達成しようとしているのは、iPhoneカメラを使って写真を撮ってから、写真の一部を他の写真に置き換えることです。写真を撮り、UIViewでオーバーレイすることを考えていました低アルファですが、私は絵の特定の部分だけを置き換えることはできません。あなたに私にいくつかのアイデアを与えることができれば、私は本当にグレードアップします。画像を変更する

答えて

1

iOSの場合、画像用のAPIがいくつかありますが、私はあなたの混乱を理解しています。 まず、UIImage、画像のCocoaTouch抽象化があります。 次に、画像のCoreGraphics抽象化であるCGImageがあります。 さらに、イメージのCoreImage抽象化であるCIImageがあります。

これらはすべて、素晴らしいブリッジフリーの方法で一緒に使用できない異なるエンティティです。代わりに、さまざまな形式に変換する必要があります。

通常、最終的には、ウィジェットで表示できるUIImageが必要です。この画像は、CGImageまたはCIImageから作成できます。 CIImageには、高度なフィルタ機能が含まれています。たとえば、適切なコンポジションフィルタを使用して説明したように、別の画像を上に置くことができます。

CIImageは、どんな方法でも高速で優れていますが、まだiOSでは完全にサポートされていません。 iOS用の独自のカスタムフィルタをまだ作成していない可能性があり、フィルタの一部のみがまだサポートされていません。

したがって、この目的でCGImageを使用することをお勧めします。新しいレンダーコンテキストにレンダリングし、そのレンダリングコンテキストからUIImageを作成する必要があります。

これはトリックを行う必要があります。

UIImage *originalImage = ...; 
UIImage *frontImage = ...; 
CGSize destinationSize = originalImage.frame.size; 

UIGraphicsBeginImageContext(destinationSize); 
[originalImage drawInRect:CGRectMake(0,0,destinationSize.width,destinationSize.height)]; 
[originalImage drawInRect:CGRectMake(10,10,destinationSize.width - 20,destinationSize.height - 20)]; 
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
0

はciimageにポイント 1.利用quartzcoreライブラリで両方の画像 2.変換をあなたに説明しています。 (多くがあり、多くのものを立地しています) が好きな、あなたの必要性に応じて、今すぐ利用フィルタを

CIImage *paper1 =[CIImage imageWithData:UIImageJPEGRepresentation([UIImage imageNamed:@"heart123.png"], 1)]; 

を..「CISourceAtopCompositing」または「CISourceOverCompositing」フィルタ とあなたが得る:変換のための コードがあります何あなたがそれらを使用するための

コードを望むのである:ここでは

CIContext *context = [CIContext contextWithOptions:nil]; 

    CIFilter filter= [CIFilter filterWithName:@"CISourceAtopCompositing"]; //for CISourceAtopCompositing method 
    [filter setDefaults]; 
    [filter setValue:sourceImage forKey:@"inputImage"]; 
    [filter setValue:backgroundImage forKey:@"inputBackgroundImage"]; 

backgroundImageの、そしてsourceImage両方CIImageはUIImage

からに変換され、

今編集使用後に、このコードをuiimageを取得する

CIImage *outputImage = [filter valueForKey:@"outputImage"]; 
CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]]; 
UIImage *outputUIImage = [UIImage imageWithCGImage:cgImage]; 
関連する問題