2012-11-29 67 views
1

我在UIImage上應用銳化濾鏡時遇到了一些問題。使用CIFilters時獲取Alpha通道[如何清除]

該代碼完美地工作,但由此產生的UIImage有一個Alpha通道的問題。這反過來導致一些性能問題。

這是我初始化我的背景和過濾

EAGLContext *myEAGLContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; 
NSMutableDictionary *options = [[NSMutableDictionary alloc] init]; 
[options setObject: [NSNull null] forKey: kCIContextWorkingColorSpace]; 
context = [CIContext contextWithEAGLContext:myEAGLContext options:options]; 
sharpenLuminanceFilter = [CIFilter filterWithName:@"CISharpenLuminance"]; 

而且我用下面的函數來生成圖像

- (UIImage *)applySharpingFilter:(UIImage *)originalImage withValue:(float)value{ 

CIImage *image = [CIImage imageWithCGImage:originalImage.CGImage]; 
[sharpenLuminanceFilter setValue:image forKey:@"inputImage"]; 
[sharpenLuminanceFilter setValue:[NSNumber numberWithFloat:value] forKey:@"inputSharpness"]; 
CIImage * result = sharpenLuminanceFilter.outputImage; 
CGImageRef cgimg = [context createCGImage:result fromRect:[result extent]]; 
double scaleFactor = [UIScreen mainScreen].scale; 
UIImage *finalImage = [UIImage imageWithCGImage:cgimg scale:scaleFactor orientation:UIImageOrientationUp]; 
CGImageRelease(cgimg); 
[sharpenLuminanceFilter setValue:nil forKey:@"inputImage"]; 
return finalImage; 

}

反正我可以指定我想要生成的圖像是OPAQUE並且沒有Alpha通道?

回答

1

您可以使用CIColorMatrix過濾器。將矩陣設置爲標識並將偏差設置爲[0,0,0,1],並且它應該爲alpha添加1,這將導致它變爲固定。

我很想知道alpha通道以哪種方式影響你的表現。

+0

這只是使整個圖片更白,並沒有消除alpha通道。如果您的圖像具有透明度,則滾動時該問題會影響性能 – Hosam

+0

您的頻道是否訂購了RGBA以外的其他產品?如果是這樣,您可能需要更改偏向量,以使1與Alpha通道處於相同的位置。 – user1118321

+0

我試過所有組合,所得圖像總是有一個alpha通道。有創建CGImage時刪除alpha通道的方法嗎? – Hosam