Как заполнить пробелы в изображении (не покрытые изображением) цветом? - PullRequest
0 голосов
/ 20 сентября 2011

Я хочу создать изображение фиксированного размера, например, 612 на 612. Я использую средство выбора изображений для выбора фотографий с моего iphone.Поэтому, чтобы гарантировать, что все фотографии будут соответствовать размеру 612 на 612 без искажений, я использую следующий метод для изменения масштаба фотографии, чтобы они соответствовали размеру 612 на 612. Однако в результате, пробелыможет быть создан в конечном изображении.(см. пример ниже)

Я использую следующий код для масштабирования моего изображения (с фиксированным размером 612 на 612)

//Scale the image to fit to imageview
UIImage *image = [self scaleImage:img toRectSize:CGRectMake(0, 0, 612, 612)];


//Method to scale image
- (UIImage *)scaleImage:(UIImage *)img toRectSize:(CGRect)screenRect
{
    UIGraphicsBeginImageContext(screenRect.size);
    float hfactor = img.size.width / screenRect.size.width;
    float vfactor = img.size.height / screenRect.size.height;

    float factor = MAX(hfactor, vfactor);

    float newWidth = img.size.width / factor;
    float newHeight = img.size.height / factor;

    float leftOffset = (screenRect.size.width - newWidth) / 2;
    float topOffset = (screenRect.size.height - newHeight) / 2;

    CGRect newRect = CGRectMake(leftOffset, topOffset, newWidth, newHeight);
    [img drawInRect:newRect blendMode:kCGBlendModePlusDarker alpha:1];

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

    return newImage;   
}

Как уже упоминалось, изображение иногда не является полным квадратом, Я получаю результат, подобный тому, что вы видите ниже:

enter image description here

Как я могу почувствовать белые пробелы на изображении черным цветом?

Ответы [ 2 ]

2 голосов
/ 20 сентября 2011

Один из способов - установить backgroundColor из UIImageView в blackColor.

Другой способ - заполнить прямоугольник blackColor при масштабировании изображения.

- (UIImage *)scaleImage:(UIImage *)img toRectSize:(CGRect)screenRect {

    ...
    CGRect newRect = CGRectMake(leftOffset, topOffset, newWidth, newHeight);

    // Fill the original rect with black color
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [[UIColor blackColor] CGColor]);
    CGContextFillRect(context, screenRect);

    [img drawInRect:newRect blendMode:kCGBlendModeNormal alpha:1];
    ...
}

Обратите внимание, что метод blendMode in drawInRect: blendMode: alpha: имеет значение kCGBlendModeNormal. Если вы установите некоторые другие режимы наложения, вы получите нежелательные результаты. Например, если вы установите режим смешивания на kCGBlendModePlusDarker и заполните прямоугольник blackColor , тогда все изображение станет черным.

1 голос
/ 20 сентября 2011

Установите цвет фона на UIImageView на черный, и вы получите то, что хотите

...