2015-05-05 2 views
1

Многие вопросы доступны на SO, но, к сожалению, я не мог решить свою проблему, используя их. Я добавил оверлейный вид на свою камеру и теперь хочу получить изображение на синей границе (только бутылка с водой).Crop Image With Desire Rect

Я попытался куски кода, как следующий

CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect); 

[UIImageView setImage:[UIImage imageWithCGImage:imageRef]]; 

CGImageRelease(imageRef); 

, но имеющие две проблемы

  1. Либо обрезается изображение становится слишком большой
  2. Изменения ориентации на -90.

для пункта 1, я думаю, что предоставляю cropRect слишком маленький, поэтому он показывает очень маленькую часть изображения со слишком увеличенным видом. на моем другом viewController У меня есть UIImageView (там, где обрезанное изображение должно отображаться) того же размера, что и прямоугольник камеры в синей рамке. Итак, вопрос заключается в том, как обрезать изображение и какие значения я должен предоставить для cropRect?

enter image description here

ответ

0

Предполагая, что размер изображения 1280 * 1080 и размер вид кадрирования 320 * 480 Вам нужно сделать следующее

  1. Преобразование кадра вашей точки зрения растениеводства по размеру изображения прямоугольника (0, 0 , 1280, 1080) с помощью найти масштабный коэффициент

    float xScale = 1280/320; 
    float yScale = 1080/480; 
    
    float scaleFactor = (xScale < yScale) ? xScale : yScale; 
    
  2. Умножить cropView кадр за масштабный коэффициент. Это сопоставляет координаты экрана с координатами размера изображения. Затем используйте новый cropRect с

    CGImageCreateWithImageInRect([largeImage CGImage], cropRect); 
    

Проблема с различной ориентацией, что CoreGraphics использует другую систему, как сравнить для просмотра координатной системы координат. Quartz 2D Coordinate Systems, так что попробуйте установить

[UIImage imageWithCGImage:imageRef].imageOrientation = largeImage.imageOrientation 
+0

Какие значения мне нужно предоставить в 'cropRect'? – Ans

+0

Предполагая размер изображения как 1280 * 1080 и обрезаем прямоугольник как {40, 50, 320, 480}. Convert croprect by {40 * scaleFactor, 50 * scaleFactor, 320 * scaleFactor, 480 * scaleFactor} и использовать этот новый прямоугольник для обжатия –

+0

для 'imageOrientation' он говорит' присваивание только для чтения .' – Ans

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

  • Нет связанных вопросов^_^