iOS 图像处理

来源:互联网 发布:sqlserver存储过程作用 编辑:程序博客网 时间:2024/05/29 02:48

1. 图片缩放:

代码
复制代码
- (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.00.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] < 6return [UIColor blackColor];
    
    
// strip 0X if it appears
    if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2];
    
if ([cString length] != 6return [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;

} 

0 0
原创粉丝点击