Копировать часть масштабированного UIImage - PullRequest
3 голосов
/ 15 января 2010

Я хочу иметь возможность масштабировать и позиционировать изображение, а затем сохранить только часть этого изображения. В настоящее время у меня есть UIImageView внутри UIScrollView. После увеличения и позиционирования изображения я нажимаю кнопку и затем получаю следующий код.

// imageScale = current scale of UIView
// get the new width and height of the scaled UIView
float scaledImageWidth = [scrollView viewWithTag:1].frame.size.width;
float scaledImageHeight = [scrollView viewWithTag:1].frame.size.height;

// get starting X and Y coords of target in relation to UIView 
// target is a box in the middle of the screen, 210x255px
float imageY = scaledImageHeight / 2 - (scrollView.contentOffset.y * imageScale);
imageY = (imageY < 0) ? (140 * imageScale) + ((imageY * -1) + (scrollView.contentOffset.y *imageScale)) : (140 * imageScale) - imageY;

float imageX = scaledImageWidth / 2 - (scrollView.contentOffset.x * imageScale);
imageX = (imageX < 0) ? (56 * imageScale) + ((imageX * -1) + (scrollView.contentOffset.x *imageScale)) : (56 * imageScale) - imageX;

// image = original unscaled UIImage
// create new UIImage that matches the size of the scaled UIView we have been working with
UIGraphicsBeginImageContext( CGSizeMake(scaledImageWidth, scaledImageHeight) );
[image drawInRect:CGRectMake(0,0,scaledImageWidth, scaledImageHeight)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

// now with the UIImage that is the size we want, copy a piece of the image 
CGImageRef imageRef = CGImageCreateWithImageInRect([newImage CGImage], CGRectMake(imageX,imageY,210, 255));
UIImage* myThumbnail = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);

Кажется, это работает в основном нормально. Проблема, которую я вижу, состоит в том, что, когда я делаю окончательную копию только части изображения, копия (myThumbnail) не масштабируется. Тем не менее, источник (newImage), кажется, масштабируется без проблем. Кто-нибудь знает, что мне не хватает, или если бы был другой подход к этой проблеме?

Edit: Хорошо, я был немного не в себе. Копия масштабируется. Проблема у меня в том, что ее позиция выключена. Поэтому, если позиция изображения слишком далеко в одном направлении, новая копия не будет в правильном положении. Например, если я переместу изображение так, чтобы обрезать нижний левый угол, это может дать мне полоску справа вместо левой нижней части изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...