How to crop the UIImage?

后端 未结 7 1475
南笙
南笙 2020-11-30 01:50

I develop an application in which i process the image using its pixels but in that image processing it takes a lot of time. Therefore i want to crop UIImage (Only middle par

7条回答
  •  北海茫月
    2020-11-30 02:18

    I was looking for a way to get an arbitrary rectangular crop (ie., sub-image) of a UIImage.

    Most of the solutions I tried do not work if the orientation of the image is anything but UIImageOrientationUp.

    For example:

    http://www.hive05.com/2008/11/crop-an-image-using-the-iphone-sdk/

    Typically if you use your iPhone camera, you will have other orientations like UIImageOrientationLeft, and you will not get a correct crop with the above. This is because of the use of CGImageRef/CGContextDrawImage which differ in the coordinate system with respect to UIImage.

    The code below uses UI* methods (no CGImageRef), and I have tested this with up/down/left/right oriented images, and it seems to work great.

    
    // get sub image
    - (UIImage*) getSubImageFrom: (UIImage*) img WithRect: (CGRect) rect {
    
        UIGraphicsBeginImageContext(rect.size);
        CGContextRef context = UIGraphicsGetCurrentContext();
    
        // translated rectangle for drawing sub image 
        CGRect drawRect = CGRectMake(-rect.origin.x, -rect.origin.y, img.size.width, img.size.height);
    
        // clip to the bounds of the image context
        // not strictly necessary as it will get clipped anyway?
        CGContextClipToRect(context, CGRectMake(0, 0, rect.size.width, rect.size.height));
    
        // draw image
        [img drawInRect:drawRect];
    
        // grab image
        UIImage* subImage = UIGraphicsGetImageFromCurrentImageContext();
    
        UIGraphicsEndImageContext();
    
        return subImage;
    }
    
    

提交回复
热议问题