Я разрабатываю приложение, в котором я обрабатываю изображение с помощью его пикселей, но в той обработке изображений требуется много времени. Поэтому я хочу обрезать 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?????????
Попробуйте что-то вроде этого:
CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect);
image = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
Примечание: cropRect - это меньший прямоугольник со средней частью изображения ...
Я искал способ получить произвольную прямоугольную обрезку (т.е. фрагмент изображения) 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;
}