You чрезмерно усложняют процесс сопряжения.
Я объясню причину проблемы,
Поскольку я не являюсь носителем английского языка, если некоторые из моих объяснений не совсем понятны, скажите мне, и я попытаюсь перефразировать их.
Если вас интересует только рабочий код, без каких-либо объяснений, просто прокрутите вниз.
Прежде всего, ваши основные вопросы являются следующие два:
UIGraphicsBeginImageContextWithOptions(largeImage.size, NO, 0);
и [largeImage drawInRect:rectangle];
В UIGraphicsBeginImageContextWithOptions
вы думаете, чтобы установить новый графический контекст вас интересует, а это означает, новый размер изображения, а не большой, как вы делаете в своем примере.
Во-вторых, метод экземпляра UIImage
[yourImage drawInRect:yourRect
находится в вашей системе координат графического контекста, а не в системе координат вида.
Смысл, вы предполагаете рассматривать его как прямоугольник, который начинается с (0, 0)
и является размером вашего изображения.
После объяснения вам ошибок, которые у вас были, я отправлю 2 варианта кода.
Первый заключается в том, чтобы сделать небольшое изображение из вашего оригинального, которое вы увидите во втором, насколько простой процесс.
И второй вариант - это модифицированная версия вашего кода выше, поскольку я не знаю, к чему вы его используете, может быть, вам нужно использовать некоторые другие вещи из исходного кода.
Чтобы изменить размер изображения:
CGSize newSize = CGSizeMake(60,80); // Our new image size
CGRect newRect = CGRectMake(0, 0, 60, 80); // Our 'work' rect in out image context
// Begin a new image context with the new size we want
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0);
// Draw our image to our new rect
[largeImage drawInRect:newRect];
// Create a new UIImage from our new context
UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext();
// End our image context
UIGraphicsEndImageContext();
И это все!
Если вам все еще нужно использовать некоторые вещи из исходного кода, Вот модифицированная версия этого:
CGSize newSize = CGSizeMake(60, 80);
CGRect newRect = CGRectMake(0, 0, 60, 80);
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
[[UIColor clearColor] setFill];
CGContextSetLineWidth(context, 4.0);
CGContextSetStrokeColorWithColor(context,
[UIColor clearColor].CGColor);
CGContextAddEllipseInRect(context, newRect);
CGContextClip(context); // EDIT- this is what we were missing
CGContextStrokePath(context);
[largeImage drawInRect:newRect];
UIImage *smallSizeImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
удачи мат!
EDIT- Ознакомьтесь с указанным выше кодом для редактирования.
В принципе, то, что мы с вами пропустили в вашем коде, состоит в том, что даже жестко вы создаете округленный контекст с помощью CGContextAddEllipseInRect()
, нам не нужно звонить в CGContextClip()
, чтобы фактически «обрезать» контекст в нашей форме эллипса.
Теперь ваше изображение должно быть «закругленным».
установить цвет фона изображения в виде прозрачного цвета. –
Я не показываю изображение на изображении, просто выберите большое изображение и рисуйте на маленьком изображении –
Я хочу рисовать smallsizeImage размера прямоугольника, как упоминание в коде без белой части. –