2011-11-29 9 views
9

UIImageのマゼンタ部分をクリアして透明にするにはどうすればよいですか?UIImageでiOSカラーを透明にする

多くの回答とリンクを調べています(例:How to make one color transparent on a UIImage?答え1は、赤以外のすべてを削除します。回答2は、Why is CGImageCreateWithMaskingColors() returning nil in this case?のために動作しません)。

更新:

私はUIImageでCGImageCreateWithMaskingColorsを使用している場合は、私がnil値を取得します。 CGImageCreateWithMaskingColors(CGImageCreateWithMaskingColors)は、アルファチャンネルを取り除くと(JPEGとしてイメージを表し、それを読み戻す)、黒い背景で描画されたイメージを返します。

アップデート2、コード:

戻っゼロ:

UIImage *inputImage = [UIImage imageWithData:UIImageJPEGRepresentation(anchorWithMask, 1.0)]; 

const float colorMasking[6] = {222, 255, 222, 255, 222, 255}; 
CGImageRef imageRef = CGImageCreateWithMaskingColors(inputImage.CGImage, colorMasking); 

NSLog(@"image ref %@", imageRef); 
// imgref is NOT nil. 

UIImage *image = [UIImage imageWithCGImage:imageRef]; 

const float colorMasking[6] = {222, 255, 222, 255, 222, 255}; 
CGImageRef imageRef = CGImageCreateWithMaskingColors(anchorWithMask.CGImage, colorMasking); 

NSLog(@"image ref %@", imageRef); 
// this is going to return a nil imgref. 

UIImage *image = [UIImage imageWithCGImage:imageRef]; 

(アルファチャンネルが存在しないので、正常である)黒い背景の画像を返します更新3:

私はマスキングプロセスの後にアルファチャンネルを追加して動作させました。

+2

あなたのコードを投稿してください。 –

+2

コードを追加しました。 –

答えて

4
UIImage *image = [UIImage imageNamed:@"image.png"]; 

const float colorMasking[6] = {1.0, 1.0, 0.0, 0.0, 1.0, 1.0}; 
image = [UIImage imageWithCGImage: CGImageCreateWithMaskingColors(image.CGImage, colorMasking)]; 

送信するパラメータが無効であるため、nilが返されます。

コンポーネント
でイメージをマスクする色 の色や範囲を指定する色成分の配列:あなたはアップルのドキュメントを開く場合は、この表示されます。配列は2N の値{min [1]、max [1]、... min [N]、max [N]}を含む必要があります.Nは画像の色空間内の コンポーネントの数です。コンポーネントの各値は、 有効なイメージサンプル値である必要があります。イメージに整数ピクセルコンポーネントがある場合は、 の各値は[0 .. 2 ** bitsPerComponent - 1]の範囲内になければなりません(ここで、 bitsPerComponentはイメージのビット数/コンポーネントです)。画像 に浮動小数点ピクセルコンポーネントがある場合、各値は有効なカラーコンポーネントである任意の 浮動小数点数になります。

Option + Mouseを押してドキュメントをすばやく開くことができます.CGImageCreateWithMaskingColorsなどの機能やクラスをクリックします。

+0

私はこれを試したところ、完全に透過的なui画像を返しています。 –

+0

これは、入力イメージが次のようになります。http://i.imgur.com/lxJdm.png(これはpngバージョン、内部的にはUIImagePickerのUIImageです) –

4

私はあなたが削除したい色の範囲でマスクを交換し、それを使用することができます白い背景を削除し、この静的関数を作った:

+ (UIImage*) processImage :(UIImage*) image 
{ 
    const float colorMasking[6]={222,255,222,255,222,255}; 
    CGImageRef imageRef = CGImageCreateWithMaskingColors(image.CGImage, colorMasking); 
    UIImage* imageB = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef); 
    return imageB; 
} 
+1

これをテストする前に投票しましたが、仕事。 –

+0

私のプロジェクトに取り組んでいて、私は白い色の範囲を取り除いています。私は、あなたがRedから削除される222 - > 255の色の範囲を指定すると思います。私はそれを100%理解していないかもしれませんが、必要な範囲でもう一度試すことができます。 –

+0

@khaledannajar私はこのコードを使っていますが、完璧ですが、私のアプリでプログラムで描画した空白行の境界から白いpixcelを取り除くことはできません。 – kb920