境界線や長方形のUIImageを変更できるアプリに取り組んでいます。境界線はさまざまですが、UIImageがはさみなどで切り取られたように見えます。
これを行うための最良の方法は何ですか?
私の最初の考えは、探している正しい境界線効果を備えた透明なPNGの束を準備し、それをUIImageのマスクとして使用することです。これは正しい道ですか?または、これを行うためのより柔軟なプログラムによる方法はありますか?
境界線や長方形のUIImageを変更できるアプリに取り組んでいます。境界線はさまざまですが、UIImageがはさみなどで切り取られたように見えます。
これを行うための最良の方法は何ですか?
私の最初の考えは、探している正しい境界線効果を備えた透明なPNGの束を準備し、それをUIImageのマスクとして使用することです。これは正しい道ですか?または、これを行うためのより柔軟なプログラムによる方法はありますか?
画像をマスクするために使用できるCoreGraphicsの呼び出しは次のとおりです。
//Mask Image
UIImage *inputImage = [UIImage imageNamed:@"inputImage.png"];
CGImageRef maskRef = [UIImage imageNamed:@"mask.png"].CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask([inputImage CGImage], mask);
CGImageRelease(mask);
UIImage *maskedImage = [UIImage imageWithCGImage:masked];
CGImageRelease(masked);
そのためには画像マスキングが必要です。私はそれを使用する方法と、自分のアプリケーションでどのように使用したかについてのチュートリアルを作成しました。
次のサンプルコードは、開始に役立つはずです。入力として元の画像とマスク画像が必要であり、出力としてマスクされた画像を返します。
- (UIImage*) maskImage:(UIImage *) image withMask:(UIImage *) mask
{
CGImageRef imageReference = image.CGImage;
CGImageRef maskReference = mask.CGImage;
CGImageRef imageMask = CGImageMaskCreate(CGImageGetWidth(maskReference),
CGImageGetHeight(maskReference),
CGImageGetBitsPerComponent(maskReference),
CGImageGetBitsPerPixel(maskReference),
CGImageGetBytesPerRow(maskReference),
CGImageGetDataProvider(maskReference),
NULL, // Decode is null
YES // Should interpolate
);
CGImageRef maskedReference = CGImageCreateWithMask(imageReference, imageMask);
CGImageRelease(imageMask);
UIImage *maskedImage = [UIImage imageWithCGImage:maskedReference];
CGImageRelease(maskedReference);
return maskedImage;
}
うん、それはあなたがする必要があることのほとんどです。最善のアプローチは、コアグラフィックスを使用することです。Quartz 2Dプログラミングガイドには、画像を他の画像でマスクする方法を説明する記事があります。プロパティを介してオブジェクトCGImageRef
から(これらのコアグラフィックスメソッドが使用する)を取得し、クラスメソッドを使用して変更された(マスクされた)オブジェクトから戻ることができます。UIImage
CGImage
UIImage
CGImageRef
UIImage
+imageWithCGImage:
パスを使用してこれを行う別の方法があります。円でそれを行い、閉じたパスで機能するように簡単に編集できるコードを投稿しました。