Как обрезать UIImage?

Я разрабатываю приложение, в котором я обрабатываю изображение с помощью его пикселей, но в той обработке изображений требуется много времени. Поэтому я хочу обрезать UIImage (Только средняя часть изображения т.е. removing/croping граничила, часть изображения).I имеют разработать код,

- (NSInteger) processImage1: (UIImage*) image
{

 CGFloat width = image.size.width;
 CGFloat height = image.size.height;
 struct pixel* pixels = (struct pixel*) calloc(1, image.size.width * image.size.height * sizeof(struct pixel));
 if (pixels != nil)
 {
  // Create a new bitmap
  CGContextRef context = CGBitmapContextCreate(
              (void*) pixels,
              image.size.width,
              image.size.height,
              8,
              image.size.width * 4,
              CGImageGetColorSpace(image.CGImage),
              kCGImageAlphaPremultipliedLast
              );
  if (context != NULL)
  {
   // Draw the image in the bitmap
   CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, image.size.width, image.size.height), image.CGImage);
   NSUInteger numberOfPixels = image.size.width * image.size.height;

   NSMutableArray *numberOfPixelsArray = [[[NSMutableArray alloc] initWithCapacity:numberOfPixelsArray] autorelease];
}

Как я беру (обрезающий снаружи ограниченный) средняя часть UIImage?????????

38
задан SpaceDog 15 January 2012 в 07:19
поделиться

2 ответа

Попробуйте что-то вроде этого:

CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect);
image = [UIImage imageWithCGImage:imageRef]; 
CGImageRelease(imageRef);

Примечание: cropRect - это меньший прямоугольник со средней частью изображения ...

79
ответ дан 27 November 2019 в 03:05
поделиться

Я искал способ получить произвольную прямоугольную обрезку (т.е. фрагмент изображения) UIImage.

Большинство опробованных мной решений не работают, если ориентация изображения отличается от UIImageOrientationUp.

Например:

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

Обычно, если вы используете камеру iPhone, вы есть другие ориентации, такие как UIImageOrientationLeft, и вы не получите правильную обрезку с указанным выше. Это связано с использованием CGImageRef / CGContextDrawImage, которые отличаются системой координат относительно UIImage.

В приведенном ниже коде используются методы UI * (без CGImageRef), и я тестировал это с изображениями, ориентированными вверх / вниз / влево / вправо, и, похоже, он отлично работает.


// 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;
}

40
ответ дан 27 November 2019 в 03:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: