2012-03-06 2 views
0

В моем приложении необходимо захватить изображение из библиотеки фотографий или камеры, и если пользователь хочет обрезать изображение, тогда он должен это сделать, но я не знаю, как для обрезки изображения, извлеченного из камеры или библиотеки фотографий.iPhone: Как обрезать изображение в ios5

если у вас есть какие-либо идеи, то поделиться ...

ответ

0

Вы можете обрезать изображение с помощью UIGraphicsGetImageFromCurrentImageContext

Идея заключается в том, чтобы сделать изображение в обрезанные графический контекст с помощью CoreGraphics, а затем экспортировать ток контекст к изображению.

UIGraphicsGetImageFromCurrentImageContext Возвращает изображение, основанное на содержимое текущей битовой карты на основе графического контекста.

Возврат Объект изображения, содержащий содержимое текущего растрового графического контекста.

попробовать что-то вроде этого:

- (UIImage*)imageCrop:(UIImage *)imageToCrop toRect:(CGRect)rect 
{ 
    UIGraphicsBeginImageContext(rect.size); 
    CGContextRef currentContext = UIGraphicsGetCurrentContext(); 

    CGRect clippedRect = CGRectMake(0, 0, rect.size.width, rect.size.height); 
    CGContextClipToRect(currentContext, clippedRect); 

    CGRect drawRect = CGRectMake(rect.origin.x, rect.origin.y, imageToCrop.size.width, imageToCrop.size.height); 
    CGContextDrawImage(currentContext, drawRect, imageToCrop.CGImage); 
    UIImage *cropped = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return cropped; 
} 

надеюсь, что это помогает, Винсент

+1

Это переворачивает изображение вверх дном. – Shailesh

0

Я сделал то же самое в Mac, вероятно, вы могли бы попробовать, что из,

+(NSImage *)BreakImageForFirstImage:(NSImage *)pSrcImage Size:(NSSize)imageSize{ 

    /* 
    Create a new NSImage with the size of the subrect, lock focus on it, draw the sub rect of the source image into 
    the new, locked image using -drawInRect:fromRect:operation:fraction: ("fromRect:" should be the subrect of the 
    source; the first rect argument will be a rect of the same size as the subrect, with a 0,0 origin), then unlock 
    focus from the new image. Done. Because of all that's involved in this, it might still be more efficient just to 
    load individual images 

    */ 


    NSSize srcSize = [pSrcImage size]; 

    int subImageHeight = imageSize.height; 
    int subImageWidth = imageSize.width; 

    NSRect subImageRect = NSMakeRect(0,0,imageSize.width,imageSize.height); 

    NSRect tempRect = NSMakeRect(0,0,imageSize.width,imageSize.height); 

    //NSMutableArray *pImageArray = [[NSMutableArray alloc]initWithCapacity:noOfImages]; 

    NSImage *pTempImage = nil; 
    int rowId =0; 
    int colId = 0; 
    //for(;rowId<noOfRow;rowId++) 
    { 
     pTempImage = [[NSImage alloc]initWithSize:imageSize]; 
     tempRect = NSMakeRect(rowId*subImageWidth,colId*subImageHeight,subImageWidth,subImageHeight); 
     [pTempImage lockFocus]; 
     [pSrcImage drawInRect:subImageRect fromRect:tempRect operation:NSCompositeSourceOver fraction:1.0]; 
     [pTempImage unlockFocus]; 
     //[pImageArray insertObject:pTempImage atIndex:rowId]; 

    } 

    return pTempImage; 
    /* */ 
} 

Может быть, в некоторых местах вам может потребоваться преобразовать NS в пользовательский интерфейс, чтобы он запускался для iOS