iOS图像处理片段

-  (UIImage * )resizeImage:(UIImage * )image toWidth:(NSInteger)width height:(NSInteger)height
{
    
//  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旋转:

代码
-  ( void )rotateView:(UIView  * )view toAngle:( float )angle
{
    [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 
* =  [[[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上任意点的颜色:

代码
复制代码
-  (UIColor * ) getPixelColorAtLocation:(CGPoint)point {
    

    
    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 mainScreenbounds].size;

  CGRect rect = CGRectMake( size.width/2,size.height/255);

  UIGraphicsBeginImageContext(size);

  CGContextRef context = UIGraphicsGetCurrentContext();

 

  unsigned int red, green, blue;

  // Fill color.

  CGContextSetRGBFillColor(context, 00.70.71.0);

 

  // Your drawing code.

  CGContextFillEllipseInRect(context, rect);

 

  // Get the image and return.

  UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

  UIGraphicsEndImageContext();

  return image;

} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值