2016-11-17 1 views
1

CIImageUIImageに変換するこのカテゴリを作成しました。私が使用しているCIImageCIFilterから来ています。これを実行するとCIImageサイズエクステント?

-(UIImage *)obtainImageWithRetinaScale:(CGFloat)scale 
{ 
    CIContext *context = [CIContext contextWithOptions:nil]; 

    //CGRect frame = CGRectMake(0,0,700,392); 
    CGImageRef processedCGImage = [context createCGImage:self 
               fromRect:[self extent]]; 

    UIImage *returnImage = [UIImage imageWithCGImage:processedCGImage 
            scale:scale 
           orientation:UIImageOrientationUp]; 
    CGImageRelease(processedCGImage); 

    return returnImage; 
} 

は、[self extent]はそれは(0、0、無限大、無限大)...そこは本当に膨大な数かろうじてあり、文字化け番号の矩形を与えます。

明らかに処理された画像はゼロです。

フレームを正しいサイズにすると、画像が正しく生成されます。

+0

独自のカーネルを作成していますか? http://benbritten.com/2008/07/24/cifilter-infinite-extent-problems/ – HAS

+0

これは役に立ちますか? http://stackoverflow.com/a/21787766/1489885 – HAS

答えて

1

クレジットは、私は、このコミュニティのwiki作っ理由で彼の答えhereWilliam Vasconcelosに完全に行き、次のコードを使用します。

//assume beginImage is CIImage you want to tint    
CIImage* outputImage = nil; 

//create some blue 
CIFilter* blueGenerator = [CIFilter filterWithName:@"CIConstantColorGenerator"]; 
CIColor* blue = [CIColor colorWithString:@"0.1 0.5 0.8 1.0"]; 
[blueGenerator setValue:blue forKey:@"inputColor"]; 
CIImage* blueImage = [blueGenerator valueForKey:@"outputImage"]; 

//apply a multiply filter 
CIFilter* filterm = [CIFilter filterWithName:@"CIMultiplyCompositing"]; 
[filterm setValue:blueImage forKey:@"inputImage"]; 
[filterm setValue:beginImage forKey:@"inputBackgroundImage"]; 
outputImage = [filterm valueForKey:@"outputImage"]; 

は、いくつかの個人的な貢献をもたらすと答え、それは価値があるようにするには、ここにありますSwift 3バージョン:

// assume beginImage is the CIImage you want to tint 
let outputImage: CIImage? 
let blueGenerator = CIFilter(name: "CIConstantColorGenerator", withInputParameters: ["inputColor": CIColor(string: "0.1 0.5 0.8 1.0")]) 
let blueImage = blueGenerator!.outputImage 

let filterM = CIFilter(name: "CIMultiplyCompositing", withInputParameters: ["inputImage": blueImage, "inputBackgroundImage": beginImage]) 
outputImage = filterM.outputImage 
関連する問題