2014-11-28 2 views
1

! [Введите описание изображения здесь] [1] Используя следующий код, я могу нарисовать большое изображение в малой форме, но у нового изображения есть свой контекст просмотра или другое другое новое изображение в центре нового image но имеют большой белый фон, чтобы прикрыть большой imageSize.Как нарисовать большое изображение в небольшом размере с новым контекстом?

Итак, фактический размер изображения такой же, как и для большого изображения, но я хочу удалить лишнее пространство.

UIGraphicsBeginImageContextWithOptions(largeImage.size, NO, 0); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    [[UIColor clearColor] setFill]; 
    CGContextSetLineWidth(context, 4.0); 
    CGContextSetStrokeColorWithColor(context, 
            [UIColor clearColor].CGColor); 
    CGRect rectangle = CGRectMake((largeImage.size.width-80)/2, (largeImage.size.height-60)/2, 60, 80); 
    CGContextAddEllipseInRect(context, rectangle); 
    CGContextStrokePath(context); 
    [largeImage drawInRect:rectangle]; 

    UIImage *smallSizeImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

Наконец, я получаю smallSizeimage с большим белым фоном. Я хочу изменить свой белый фон, не теряя качество изображения. Пожалуйста, руководство меня ..

+0

установить цвет фона изображения в виде прозрачного цвета. –

+0

Я не показываю изображение на изображении, просто выберите большое изображение и рисуйте на маленьком изображении –

+0

Я хочу рисовать smallsizeImage размера прямоугольника, как упоминание в коде без белой части. –

ответ

0

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(), чтобы фактически «обрезать» контекст в нашей форме эллипса.
Теперь ваше изображение должно быть «закругленным».

+0

Привет, ваше решение кажется работающим, но всякий раз, когда мы отбрасывали размер до (30,50), тогда разрешение снизилось. Пожалуйста, сообщите нам, как мы можем сохранить разрешение HD, но тогда ваши решения работают идеально, и я даю вам полную оценку. –

+0

UIGraphicsBeginImageContextWithOptions (newSize, NO, 0); // Нарисуйте наше изображение на наш новый прямоугольник [largeImage drawInRect: newRect]; // Создаем новый UIImage из нашего нового контекста. UIImage * smallImage = UIGraphicsGetImageFromCurrentImageContext(); ... используя этот образ кода, сделанный небольшими размерами, но разрешенное разрешение. –

+0

Если я правильно вас понимаю, я думаю, что весь ваш подход был неправильным в первую очередь. В примере в вашем вопросе вы пытались создать новое изображение с меньшим разрешением. если 'largeImage', скажем, 120pt x 160x,' smallSizeImage' составляет половину размера (60pt x 80pt), поэтому разрешение «упало», потому что этот код должен «отбросить» разрешение. Если вы хотите, чтобы изображение имело такое же разрешение, но просто выглядело меньше на экране, просто измените рамку представления изображения, которое представляет ее. – AMI289

0

Заменить этот

UIGraphicsBeginImageContextWithOptions(largeImage.size, NO, 0); 

с этим:

UIGraphicsBeginImageContextWithOptions(small.size, NO, 0); 

Furhermore здесь это метод, который я называю, чтобы изменить размер изображения:

- (UIImage*)imageWithImage:(UIImage*)image 
{ 

CGSize newSize=CGSizeMake(100, 100); 

UIGraphicsBeginImageContext(newSize); 
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; 
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

return newImage; 
} 
+0

С помощью решения разрешения на изображение снижалось много. Есть ли способ, с помощью которого мы можем сохранить разрешение, как это делает другое приложение, например, «Приложение для смартфонов», –

Смежные вопросы