{
// Create a graphics context with the target size
// On iOS 4 and later, use UIGraphicsBeginImageContextWithOptions to take the scale into consideration
// On iOS prior to 4, fall back to use UIGraphicsBeginImageContext
CGSize size = CGSizeMake(width, height);
if (NULL != UIGraphicsBeginImageContextWithOptions)
UIGraphicsBeginImageContextWithOptions(size, NO, 0 );
else
UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();
// Flip the context because UIKit coordinate system is upside down to Quartz coordinate system
CGContextTranslateCTM(context, 0.0 , height);
CGContextScaleCTM(context, 1.0 , - 1.0 );
// Draw the original image to the context
CGContextSetBlendMode(context, kCGBlendModeCopy);
CGContextDrawImage(context, CGRectMake( 0.0 , 0.0 , width, height), image.CGImage);
// Retrieve the UIImage from the current context
UIImage * imageOut = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return imageOut;
}
2.UIView旋转:
{
[UIView beginAnimations:nil context:nil];
[view setTransform:CGAffineTransformMakeRotation(angle)];
[UIView commitAnimations];
}
3. 颜色处理函数:
#pragma mark Color convert
- (UIColor * ) str2Color:(NSString * )str {
SEL blackSel = NSSelectorFromString(str); // NSSelectorFromString(@"blackColor");
UIColor * tColor = nil;
if ([UIColor respondsToSelector: blackSel])
tColor = [UIColor performSelector:blackSel];
return tColor;
}
- (UIColor * ) hexStr2Color:(NSString * )hexStr {
NSString * cString = [[hexStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
// String should be 6 or 8 characters
if ([cString length] < 6 ) return [UIColor blackColor];
// strip 0X if it appears
if ([cString hasPrefix: @" 0X " ]) cString = [cString substringFromIndex: 2 ];
if ([cString length] != 6 ) return [UIColor blackColor];
// Separate into r, g, b substrings
NSRange range;
range.location = 0 ;
range.length = 2 ;
NSString * rString = [cString substringWithRange:range];
range.location = 2 ;
NSString * gString = [cString substringWithRange:range];
range.location = 4 ;
NSString * bString = [cString substringWithRange:range];
// Scan values
unsigned int r, g, b;
[[NSScanner scannerWithString:rString] scanHexInt: & r];
[[NSScanner scannerWithString:gString] scanHexInt: & g];
[[NSScanner scannerWithString:bString] scanHexInt: & b];
return [UIColor colorWithRed:(( float ) r / 255.0f )
green:(( float ) g / 255.0f )
blue:(( float ) b / 255.0f )
alpha: 1.0f ];
}
- (NSString * )color2str:(UIColor * )color {
CGColorRef c = color.CGColor;
const CGFloat * components = CGColorGetComponents(c);
size_t numberOfComponents = CGColorGetNumberOfComponents(c);
NSMutableString * s = [[[NSMutableString alloc] init] autorelease];
[s appendString: @" { " ];
for (size_t i = 0 ; i < numberOfComponents; ++ i) {
if (i > 0 ) {
[s appendString: @" , " ];
}
[s appendString:[NSString stringWithFormat: @" %d " , ( int )(components[i] * 255 ) ]];
}
[s appendString: @" } " ];
return s;
}
- (NSString * )color2str1:(UIColor * )color {
const CGFloat * components = CGColorGetComponents(color.CGColor);
NSString * colorAsString = [NSString stringWithFormat: @" %1f,%1f,%1f,%1f " , components[ 0 ] * 255 , components[ 1 ] * 255 , components[ 2 ] * 255 , components[ 3 ]];
}
4. 三点坐标中间点对应的角度,以及判断是否顺时针
- (BOOL) chkClockWise:(CGPoint)a B:(CGPoint)b C:(CGPoint)c {
double ax = a.x - b.x;
double ay = - a.y + b.y;
double cx = c.x - b.x;
double cy = - c.y + b.y;
NSLog( @" result:%d " ,(cy * ax) <= (ay * cx));
NSLog( @" (x1,y1)=(%1f,%1f) " ,ax, ay);
NSLog( @" (x2,y2)=(%1f,%1f)\r\n\r\n " ,cx, cy);
return ((cy * ax) <= (ay * cx));
}
5. 点坐标旋转后弧度后获取新的坐标:
6. 抓取UIView上任意点的颜色:
UIGraphicsBeginImageContext(self.bounds.size);
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGImageRef inImage = viewImage.CGImage;
UIColor * color = nil;
// Create off screen bitmap context to draw the image into. Format ARGB is 4 bytes for each pixel: Alpa, Red, Green, Blue
CGContextRef cgctx = [self createARGBBitmapContextFromImage:inImage];
if (cgctx == NULL) { return nil; /* error */ }
size_t w = CGImageGetWidth(inImage);
size_t h = CGImageGetHeight(inImage);
CGRect rect = {{ 0 , 0 },{w,h}};
// Draw the image to the bitmap context. Once we draw, the memory
// allocated for the context for rendering will then contain the
// raw image data in the specified color space.
CGContextDrawImage(cgctx, rect, inImage);
// Now we can get a pointer to the image data associated with the bitmap
// context.
unsigned char * data = CGBitmapContextGetData (cgctx);
if (data != NULL) {
// offset locates the pixel in the data from x,y.
// 4 for 4 bytes of data per pixel, w is width of one row of data.
int offset = 4 * ((w * round(point.y)) + round(point.x));
int alpha = data[offset];
int red = data[offset + 1 ];
int green = data[offset + 2 ];
int blue = data[offset + 3 ];
NSLog( @" offset: %i colors: RGB A %i %i %i %i " ,offset,red,green,blue,alpha);
color = [UIColor colorWithRed:(red / 255.0f ) green:(green / 255.0f ) blue:(blue / 255.0f ) alpha:(alpha / 255.0f )];
}
// When finished, release the context
CGContextRelease(cgctx);
// Free image data memory for the context
if (data) { free(data); }
return color;
}
- (CGContextRef) createARGBBitmapContextFromImage:(CGImageRef) inImage {
CGContextRef context = NULL;
CGColorSpaceRef colorSpace;
void * bitmapData;
int bitmapByteCount;
int bitmapBytesPerRow;
// Get image width, height. We'll use the entire image.
size_t pixelsWide = CGImageGetWidth(inImage);
size_t pixelsHigh = CGImageGetHeight(inImage);
// Declare the number of bytes per row. Each pixel in the bitmap in this
// example is represented by 4 bytes; 8 bits each of red, green, blue, and
// alpha.
bitmapBytesPerRow = (pixelsWide * 4 );
bitmapByteCount = (bitmapBytesPerRow * pixelsHigh);
// Use the generic RGB color space.
colorSpace = CGColorSpaceCreateDeviceRGB();
if (colorSpace == NULL)
{
fprintf(stderr, " Error allocating color space\n " );
return NULL;
}
// Allocate memory for image data. This is the destination in memory
// where any drawing to the bitmap context will be rendered.
bitmapData = malloc( bitmapByteCount );
if (bitmapData == NULL)
{
fprintf (stderr, " Memory not allocated! " );
CGColorSpaceRelease( colorSpace );
return NULL;
}
// Create the bitmap context. We want pre-multiplied ARGB, 8-bits
// per component. Regardless of what the source image format is
// (CMYK, Grayscale, and so on) it will be converted over to the format
// specified here by CGBitmapContextCreate.
context = CGBitmapContextCreate (bitmapData,
pixelsWide,
pixelsHigh,
8 , // bits per component
bitmapBytesPerRow,
colorSpace,
kCGImageAlphaPremultipliedFirst);
if (context == NULL)
{
free (bitmapData);
fprintf (stderr, " Context not created! " );
}
// Make sure and release colorspace before returning
CGColorSpaceRelease( colorSpace );
return context;
}
7. 在iphone程序中实现截屏的一种方法:
//导入头文件
#import <QuartzCore/QuartzCore.h>
//将整个self.view大小的图层内容创建一张图片image
UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image= UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//然后将该图片保存到图片图
UIImageWriteToSavedPhotosAlbum(image, self, nil, nil);
8. 画圆点图片:
-(UIImage*)createImage
{
CGSize size = [[UIScreen mainScreen] bounds].size;
CGRect rect = CGRectMake( size.width/2,size.height/2, 5, 5);
UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();
unsigned int red, green, blue;
// Fill color.
CGContextSetRGBFillColor(context, 0, 0.7, 0.7, 1.0);
// Your drawing code.
CGContextFillEllipseInRect(context, rect);
// Get the image and return.
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}