Ale*_*one 3 iphone core-graphics objective-c uiview
我有一组图形,我想在我的应用程序中重用.它们是具有透明度的按钮和图像.我不想拥有数十个硬编码的按钮图像,而是希望拥有一个按钮图像,并能够动态地为其指定颜色,例如导航栏和它的色彩.
是否有可能替换/改变UIView的色调?
或者:我知道如果我将透明图像覆盖在另一个UIView上,那么我可以改变背景颜色,两个图像将混合在一起.但透明区域将呈现背景的色调.
有没有办法保持透明区域透明,同时将两个图像混合在一起?我听说有剪贴膜,但从未使用它们.
谢谢!
更新:
这应该工作,但返回零图像,我看到其他人报告相同的问题.也许这将在未来发挥作用
-(void)doHueAdjustFilter
{
//does not work, returns nil image
CIImage* inputImage = [CIImage imageWithCGImage:[[UIImage imageNamed:@"button.jpg"]CGImage]];
CIFilter *myFilter;
NSDictionary *myFilterAttributes;
myFilter = [CIFilter filterWithName:@"CIHueAdjust"];
[myFilter setDefaults];
myFilterAttributes = [myFilter attributes];
[myFilterAttributes setValue:inputImage forKey:@"inputImage"];
[myFilterAttributes setValue:[NSNumber numberWithFloat:0.9] forKey:@"inputAngle"];
CIContext *context = [CIContext contextWithOptions:nil];
CIImage *ciimage = [myFilter outputImage];
CGImageRef cgimg = [context createCGImage:ciimage fromRect:[ciimage extent]];
UIImage *uimage = [UIImage imageWithCGImage:cgimg scale:1.0f orientation:UIImageOrientationUp];
[caduceusImageView setImage:uimage];
CGImageRelease(cgimg);
}
Run Code Online (Sandbox Code Playgroud)
我对这段代码片段感到非常兴奋.它完全改变了图形或按钮的色调.矢量图形看起来像我在插画中改变了色调.这节省了大量时间,因为我不再需要放弃我的工作,切换到插图画家并开始绘制具有不同色调的按钮.一个按钮适用于所有人!
适用于iOS5
-(UIImage*)doHueAdjustFilterWithBaseImageName:(NSString*)baseImageName hueAdjust:(CGFloat)hueAdjust
{
CIImage *inputImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:baseImageName]];
CIFilter * controlsFilter = [CIFilter filterWithName:@"CIHueAdjust"];
[controlsFilter setValue:inputImage forKey:kCIInputImageKey];
[controlsFilter setValue:[NSNumber numberWithFloat:hueAdjust] forKey:@"inputAngle"];
NSLog(@"%@",controlsFilter.attributes);
CIImage *displayImage = controlsFilter.outputImage;
UIImage *finalImage = [UIImage imageWithCIImage:displayImage];
CIContext *context = [CIContext contextWithOptions:nil];
if (displayImage == nil || finalImage == nil) {
// We did not get output image. Let's display the original image itself.
return [UIImage imageNamed:baseImageName];
}else {
// We got output image. Display it.
return [UIImage imageWithCGImage:[context createCGImage:displayImage fromRect:displayImage.extent]];
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2025 次 |
| 最近记录: |