`
反求诸己
  • 浏览: 543140 次
  • 性别: Icon_minigender_1
  • 来自: 湖南娄底
社区版块
存档分类
最新评论

一些有关图像处理的代码片段(抓图、倒影、圆角)

 
阅读更多

 

捕捉屏幕截图
CALayer实例使用Core Graphics的renderInContext方法可以将视图绘制到图像上下文中以便转化为其他UIImage实例。前提先#import <QuartzCore/QuartzCore.h>

复制代码
+ (UIImage *) imageFromView: (UIView *)theView {
// draw a view's contents into an image context
UIGraphicsBeginImageContext(theView.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();

[theView.layer renderInContext:context];
UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return theImage;
}
复制代码

注:UIGraphicsBeginImageContext(CGSize size)创建一个基于位图的上下文(context),并将其设置为当前上下文。函数功能与UIGraphicsBeginImageContextWithOptions相同,相当于该方法的opaque参数为NO,scale因子为1.0。而UIGraphicsEndImageContext()方法是移除栈顶的基于当前位图的图形上下文。

捕捉截取某个区域内屏幕图像

复制代码
- (UIImage *)imageFromView: (UIView *) theView  atFrame:(CGRect)rect
{
UIGraphicsBeginImageContext(theView.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
UIRectClip(rect);
[theView.layer renderInContext:context];
UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return theImage;// [self getImageAreaFromImage:theImage atFrame:rect];
}
复制代码

从某图片中截图

复制代码
UIImage *image = [[UIImage alloc] initWithData:data];//
大图

CGRect imageRect = CGRectMake(0.0 , 0.0 , image.size.width, image.size.height);
CGSize itemSize = CGSizeMake(w,h);
UIGraphicsBeginImageContext(itemSize);
[image drawInRect:imageRect];
UIImage *smallimage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
复制代码

视图添加倒影效果

复制代码
const
 CGFloat kReflectPercent = -0.25f
;
const CGFloat kReflectOpacity = 0.3f ;
const CGFloat kReflectDistance = 10.0f ;

+ (void )addSimpleReflectionToView:(UIView *)theView
{
CALayer *reflectionLayer = [CALayer layer];
reflectionLayer.contents = [theView layer].contents;
reflectionLayer.opacity = kReflectOpacity;
reflectionLayer.frame = CGRectMake(0.0f ,0.0f ,theView.frame.size.width,theView.frame.size.height*kReflectPercent); // 倒影层框架设置,其中高度是原视图的百分比
CATransform3D stransform = CATransform3DMakeScale(1.0f ,-1.0f ,1.0f );
CATransform3D transform = CATransform3DTranslate(stransform,0.0f ,-(kReflectDistance + theView.frame.size.height),0.0f );
reflectionLayer.transform = transform;
reflectionLayer.sublayerTransform = reflectionLayer.transform;
[[theView layer] addSublayer:reflectionLayer];
}
复制代码

 另一:使用Core Graphics创建倒影

复制代码
+ (CGImageRef) createGradientImage:(CGSize)size
{
CGFloat colors[] = {0.0 ,1.0 ,1.0 ,1.0 };
// 在灰色设备色彩上建立一渐变
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
CGContextRef context = CGBitmapContextCreate(nil,size.width,size.height,8 ,0 ,colorSpace,kCGImageAlphaNone);
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace,colors,NULL,2 );
CGColorSpaceRelease(colorSpace);

// 绘制线性渐变
CGPoint p1 = CGPointZero;
CGPoint p2 = CGPointMake(0 ,size.height);
CGContextDrawLinearGradient(context,gradient,p1,p2,kCGGradientDrawsAfterEndLocation);

// Return the CGImage
CGImageRef theCGImage = CGBitmapContextCreateImage(context);
CFRelease(gradient);
CGContextRelease(context);
return theCGImage;
}
复制代码

//Create a shrunken frame for the reflection

复制代码
+ (UIImage *) reflectionOfView:(UIView *)theView WithPercent:(CGFloat) percent
{
// Retain the width but shrink the height
CGSize size = CGSizeMake(theView.frame.size.width, theView.frame.size.height * percent);

// Shrink the View
UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();
[theView.layer renderInContext:context];
UIImage *partialimg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

// build the mask
CGImageRef mask = [ImageHelper createGradientImage:size];
CGImageRef ref = CGImageCreateWithMask(partialimg.CGImage,mask);
UIImage *theImage = [UIImage imageWithCGImage:ref ];
CGImageRelease(ref );
CGImageRelease(mask);
return theImage;
}

const CGFloat kReflectDistance = 10.0f ;
+ (void ) addReflectionToView: (UIView *)theView
{
theView.clipsToBounds = NO;
UIImageView *reflection = [[UIImageView alloc] initWithImage:[ImageHelper reflectionOfView:theView withPercent:0.45f ]];
CGRect frame = reflection.frame;
frame.origin = CGPointMake(0.0f , theView.frame.size.height + kReflectDistance);
reflection.frame = frame;

// add the reflection as a simple subview
[theView addSubView:reflection];
[reflection release];
}
复制代码

实现圆角图片:

复制代码
UIColor *color = [UIColor colorWithRed:0.95
 green:0.95
 blue:0.95
 alpha:0
];
[aImage setBackgroundColor:color]; // 设置背景透明

/* *****设置图片圆角begin****** */
aImage.layer.masksToBounds = YES;
aImage.layer.cornerRadius = 5.0 ;
aImage.layer.borderWidth = 0.5 ;
aImage.layer.borderColor = [[UIColor grayColor] CGColor];
/* *****设置图片圆角end******* */
复制代码

另有方法可见:http://www.4ucode.com/Study/Topic/2058289转载文章。

实现iPhone图标的水晶立体效果

复制代码
- (void
)viewDidLoad {
[super viewDidLoad];
UIGraphicsBeginImageContext(icon.bounds.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
const CGFloat components[4 ] = {0.0 ,0.4 ,0.0 ,1.0 };
CGContextSetFillColor(ctx, components);
CGContextFillRect(ctx, CGRectMake(0 , 0 , icon.bounds.size.width, icon.bounds.size.height));
UIImage *background = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImage *image = [UIImage imageNamed:@" icon.png " ];
UIImage *mask = [UIImage imageNamed:@" IconBase.png " ];
UIImage *roundCorner = [UIImage imageNamed:@" round-corner.png " ];
icon.image = image;
CALayer* subLayer = [[CALayer layer] retain];
subLayer.frame = icon.bounds;
subLayer.contents = (id )[background CGImage];
CALayer* maskLayer = [[CALayer layer] retain];
maskLayer.frame = icon.bounds;
maskLayer.contents = (id )[mask CGImage];
[subLayer setMask:maskLayer];
[[icon layer] addSublayer:subLayer];
CALayer* roundCornerLayer = [[CALayer layer] retain];
roundCornerLayer.frame = icon.bounds;
roundCornerLayer.contents = (id )[roundCorner CGImage];
[[icon layer] setMask:roundCornerLayer];
[maskLayer release];
[subLayer release];
[roundCornerLayer release];
}
复制代码

两图合成一图

复制代码
- (UIImage*)addImage:(UIImage *)image1 toImage:(UIImage*)image2
{
UIGraphicsBeginImageContext(image1.size);

[image1 drawInRect:CGRectMake(0 ,0 ,image1.size.width,image1.size.height)];
[image2 drawInRect:CGRectMake(0 ,0 ,image2.size.width,image2.size.height)];

UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resultingImage;
}
复制代码

分享到:
评论

相关推荐

    图像处理关于抓图程序

    在这个压缩包中,尽管没有提供具体的图像处理程序源代码或可执行文件,但我们可以根据提供的文件名推测一些相关知识点。 1. **VIP会员.htm**:这可能是一个网页文件,通常用于介绍会员服务或者权限。在图像处理软件...

    图像抓图程序的一个源代码

    标题中的“图像抓图程序的一个源代码”表明我们要讨论的是一个用于捕获屏幕图像的软件开发项目,使用了C++编程语言。这类程序通常被称为截图工具,能够帮助用户快速、简便地获取屏幕上的任何区域或窗口,并将其保存...

    屏幕抓图小程序(完整及代码全)

    总之,屏幕抓图小程序是一个综合性的项目,涵盖了图像处理、系统调用、用户交互等多个方面的编程技术。无论是学习还是实践,它都是一个很好的起点,可以帮助开发者提升技能并深入了解计算机图形学和操作系统原理。

    大恒图像处理中采集图像代码

    MFC中实现与外部相机的联接,实时采集图像,元代码对实现步骤做了详细的说明!!

    抓图程序开发实践》配套源代码

    首先,图像处理是抓图程序的核心部分,它涉及到如何捕获屏幕上的像素数据,如何进行颜色空间转换,以及如何保存为常见的图像格式(如BMP、JPEG或PNG)。开发者需要掌握基本的图像处理库,如OpenCV或PIL(Python ...

    C#编写的抓图程序源代码

    System.Drawing命名空间是C#中用于图像处理的核心部分,包含了许多与图像、图形和颜色相关的类。例如,`Bitmap`类用于创建和操作位图图像,`Graphics`类则提供了绘制图形和文本的能力,而`Image`类是所有图像对象的...

    图像是用ccd图像传感器采集的,试用matlab进行图像处理算法,包括:去噪、边缘提取,对上述图像进行处理得到较为清晰的图像。

    图像是用ccd图像传感器采集的,试用matlab进行图像处理算法,包括:去噪、边缘提取,对上述图像进行处理得到较为清晰的图像。代码详细,清楚,有图像对比。

    《抓图程序开发实践》配套源代码

    在编程领域,抓图程序是一种常见的工具,它允许用户捕获屏幕上的图像或者特定区域,以便于记录、分享或进一步处理。《抓图程序开发实践》这本书可能详细讲解了如何设计和实现这样的软件,而配套的源代码则为读者提供...

    抓图程序源码

    屏幕抓图程序是一种实用工具,它允许用户从显示器上捕获图像,特别是在观看视频或处理动态内容时,这些内容通常超出了常规截图软件的范围。这款抓图程序提供了源码,使得开发者可以深入理解其工作原理,学习并可能...

    易语言代码抓图工具源码.zip易语言项目例子源码下载

    3. **图像处理**:抓图工具涉及到图像捕获和保存,因此源码中会包含关于图像读取、截取、保存的相关函数,如“屏幕取图”、“保存图片”等。 4. **文件操作**:保存截图到本地文件系统需要进行文件操作,源码中会...

    c#图像操作之屏幕抓图源码.rar

    在实际代码中,应添加适当的异常处理,确保在出现错误时能正确地处理和报告,例如磁盘空间不足或者无权限保存文件等情况。 9. **多线程应用** 如果需要频繁进行屏幕抓图,可能需要考虑在多线程环境中运行,以避免...

    打印代码及出错抓图

    在IT行业中,打印代码和错误抓图是两个关键的调试和问题解决步骤。它们对于理解程序的运行状态、定位和修复错误至关重要。下面将详细解释这两个概念及其重要性。 首先,"打印代码"指的是在程序运行过程中,通过输出...

    易语言代码抓图工具源码.rar

    标题提到的“易语言代码抓图工具源码.rar”是一个使用易语言编写的屏幕截图软件的源代码压缩包。这个压缩包包含了项目的源代码文件以及一个说明文档。 源码是程序开发的核心部分,它揭示了软件的实际工作原理。通过...

    摄像头抓图程序源代码

    标题中的“摄像头抓图程序源代码”指的是一个用于捕获并保存来自计算机摄像头图像的软件开发项目。这个程序的源代码是用C++编程语言编写的,因为VC(Visual C++)通常指的是Microsoft的C++开发环境。源代码是程序员...

    e语言-易语言代码抓图工具

    通过这个易语言代码抓图工具,开发者可以在不侵入程序执行流程的情况下,获取到程序运行时窗口的静态图像,这对于调试、教学或分析软件界面布局都非常有帮助。此外,这也是学习易语言和Windows API交互的一个好实践...

    可以通过通道抓图

    在压缩包文件“可以通过通道抓图.rar”中,虽然没有具体的文件名列表,但根据“vedio”这个单词,我们可以推测可能包含了与视频处理相关的文件,例如配置文件、示例代码、库文件或者是测试视频片段。开发者在使用...

    java 屏幕抓图 源代码

    Java屏幕抓图源代码涉及到的是Java图形用户界面(GUI)编程和图像处理技术。在Java中,我们可以使用java.awt.Robot类来捕获屏幕上的图像。以下是对这个知识点的详细解释: 1. **java.awt.Robot类**: Robot类是...

    抓图程序C#源代码

    本话题聚焦于一个“抓图程序”的C#源代码,这是一种能够捕获屏幕图像的实用工具。在下面的内容中,我们将深入探讨C#中实现抓图功能的关键知识点。 首先,我们需要了解C#的基本语法和面向对象编程概念。C#支持类、...

    易语言代码抓图工具

    易语言代码抓图工具源码,代码抓图工具,取代码编辑区和滚动条句柄,取易语言句柄,取窗口类名,取窗口标题,取滚动条最大值,取滚动条位置,置滚动条位置,刷新窗口显示,截取窗口位图,取要拼接图片文件名数组,FindWindowEx,...

    摄像头抓图

    在实际应用中,抓图可能会涉及图像处理和分析,例如人脸识别、物体检测等。OpenCV库提供了丰富的图像处理功能,包括滤波、边缘检测、特征提取等,可以帮助我们对抓取的图片进行进一步的处理和分析。 为了实现上述...

Global site tag (gtag.js) - Google Analytics