2010-04-16 5 views
3

Я разрабатываю простое приложение UIApplication, в котором я хочу обрезать UIImage (в формате .jpg) с помощью CGContext. Разработанный код до настоящего времени следующий:Проблема в обрезке UIImage с использованием CGContext?

CGImageRef graphicOriginalImage = [originalImage.image CGImage];

UIGraphicsBeginImageContext(originalImage.image.size); 

CGContextRef ctx = UIGraphicsGetCurrentContext(); 
CGBitmapContextCreateImage(graphicOriginalImage); 

CGFloat fltW = originalImage.image.size.width; 
CGFloat fltH = originalImage.image.size.height; 
CGFloat X = round(fltW/4); 
CGFloat Y =round(fltH/4); 
CGFloat width = round(X + (fltW/2)); 
CGFloat height = round(Y + (fltH/2)); 

CGContextTranslateCTM(ctx, 0, image.size.height); 
CGContextScaleCTM(ctx, 1.0, -1.0); 
CGRect rect = CGRectMake(X,Y ,width ,height); 
CGContextDrawImage(ctx, rect, graphicOriginalImage); 

croppedImage = UIGraphicsGetImageFromCurrentImageContext(); 

return croppedImage; 

} выше код работает нормально, но это не может обрезать изображение. Исходная память изображений и обрезанная память изображения будут одинаковыми (равными исходной памяти изображений). Вышеприведенный код подходит для обрезки изображения ??????????????????

ответ

1

Контекст, который вы создаете для рисования изображения, имеет тот же размер, что и исходное изображение. Вот почему они имеют одинаковый размер.

Если вы не хотите изобретать колесо, взгляните на проект TouchCode в Google Code. Вы найдете категории UIImage, которые выполняют эту работу (см. UIImage_ThumbnailExtensions.m).

+0

@Laurent Etiemble, Этот код доступен для загрузки? – Tirth

+0

На данный момент нет никакой загрузки. Но вы можете использовать Mercurial для клонирования репозитория. –

+0

У вас есть представление об обрезке изображения с помощью пикселя указателя anf с использованием методов CGContext? – Tirth

14

Вот хороший способ, чтобы обрезать изображение в CGRect:


- (UIImage*)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect 
{ 
    //create a context to do our clipping in 
    UIGraphicsBeginImageContext(rect.size); 
    CGContextRef currentContext = UIGraphicsGetCurrentContext(); 

    //create a rect with the size we want to crop the image to 
    //the X and Y here are zero so we start at the beginning of our 
    //newly created context 
    CGRect clippedRect = CGRectMake(0, 0, rect.size.width, rect.size.height); 
    CGContextClipToRect(currentContext, clippedRect); 

    //create a rect equivalent to the full size of the image 
    //offset the rect by the X and Y we want to start the crop 
    //from in order to cut off anything before them 
    CGRect drawRect = CGRectMake(rect.origin.x * -1, 
           rect.origin.y * -1, 
           imageToCrop.size.width, 
           imageToCrop.size.height); 

    //draw the image to our clipped context using our offset rect 
    CGContextDrawImage(currentContext, drawRect, imageToCrop.CGImage); 

    //pull the image from our cropped context 
    UIImage *cropped = UIGraphicsGetImageFromCurrentImageContext(); 

    //pop the context to get back to the default 
    UIGraphicsEndImageContext(); 

    //Note: this is autoreleased 
    return cropped; 
} 
 

Или другой способ:


- (UIImage *)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect
 { 
    CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect);
 
    UIImage *cropped = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef); 


 return cropped;
 
} 

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