2011-12-13 9 views
4

画像のマスキング+ iPhoneのSDK

enter image description here

は今、私はこの2枚の画像をマージしたいですlike image2はimage1の中央に来るでしょう。

私はAny idea why this image masking code does not work?"How to Mask an Image"

を読んしかし、この機能を使用するにしました: -

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage { 
    CGImageRef maskRef = maskImage.CGImage;  
    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef), 
             CGImageGetHeight(maskRef), 
             CGImageGetBitsPerComponent(maskRef), 
             CGImageGetBitsPerPixel(maskRef), 
             CGImageGetBytesPerRow(maskRef), 
             CGImageGetDataProvider(maskRef), NULL, false); 

    CGImageRef masked = CGImageCreateWithMask([image CGImage], mask); 
    return [UIImage imageWithCGImage:masked]; 
} 

しかし、この機能を使用することにより、Iが出力されました: -

enter image description here

+3

http://stackoverflow.com/questions/996292/how-to-mask-a-square-image-into-an-image-with-round-corners-in-the-iphone-sdk – Maulik

+0

良い質問@shweta、それを維持:) – SagarPPanchal

答えて

1

私が知る限り、問題はmaskImage:withMask:ではありません。あなたが投稿した間違った出力は間違っていません。image1のピクセルは黒で、image2は見えません。

おそらく、またはimagemaskのロードに使用した関数、またはグラフィック出力を生成するコードに問題があります。 実際には、正しい出力が得られるが、間違った色空間(アルファなしのグレースケール)を使用しているように思えます。あなたが提供する引数imageが実際にRGBa形式であり、返されたUIImageがDeviceGrayを色空間として使用する他のCGContextに描画されていないかどうかを確認してください。

私の頭に浮かぶもう1つの原因は、image1とimage2を反転させたことです。ドキュメントによれば、maskは、image(下記参照)のサイズまで拡大する必要がありますが、そこには小さな画像があります。 image1とimage2を交換しようとしたときにimage1が出力として変更されていなくても、image1がグレースケールになっているので、これは合理的です。


Iは添付画像を使用し、次いでそのまま&メソッド-(UIImage *)maskImage:(UIImage *)image withMask:(UIImage *)maskImageを貼り付けコピーテストを実行します。

私は1つのビューと(タグ1)UIImageView内部を有する単純なIOSのプロジェクト、およびコントローラに以下のコードを使用する:I(右)で次の出力を取得

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    UIImageView *imageView=(UIImageView *)[self.view viewWithTag:1]; 

    UIImage *im1=[UIImage imageNamed:@"image1"]; 
    UIImage *im2=[UIImage imageNamed:@"image2"]; 

    imageView.image=[self maskImage:im2 withMask:im1]; 

} 

を:

image2 using image1 as mask

誤ってあなたはIM2とIM1を反転した場合は、変更されていない代わりに、image1の取得。

関連する問題