Получить специфический Rect UIImage - PullRequest
1 голос
/ 07 марта 2012

Необходимо установить UIImage для своего кадра (который также является UIImage в своем собственном), так как толщина кадра неизвестна.Изображения прилагаются.

Как мы можем обнаружить прямоугольник того же UIColor в UIImage?

Ответы [ 3 ]

0 голосов
/ 07 марта 2012
UIImage *img=[UIImage imageNamed:@"yourimagename.png(any)"];

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

CGRect imageFrame=CGRectMake(x,y,img.size.width,img.size.height);

Примечание:

img.size.widthдает вам ширину вашего изображения и img.size.height дает вам высоту вашего изображения

0 голосов
/ 07 марта 2012

Вы можете проверить цвет в пикселях (0,0) .Это будет цвет рамки.Затем вы бы опустились на 1 пиксель вниз и на 1 пиксель влево, пока не получите другой цвет - вот как вы находите толщину рамки.

Примерно так:

    self.yourImage = [UIImage imageNamed:@"painting-with-border.png"];

    NSLog(@"original size: %@", NSStringFromCGSize(self.yourImage.size));

    BOOL success = NO;
    CGFloat x_frame = 1.0;
    CGFloat y_frame = 1.0;

    CGFloat x_max = self.yourImage.size.width/2.0;
    CGFloat y_max = self.yourImage.size.height/2.0;

    UIColor *frameColor = [self.yourImage colorAtPixel: CGPointMake (1.0,1.0)];

    NSString *hexFrameColor = [frameColor hexStringFromColor];
    NSLog (@"frame color: %@", hexFrameColor);

    UIColor *testPixelColor;
    NSString *hexTestPixelColor;

    while ((!success) && (x_frame < x_max) && (y_frame < y_max)) {

        x_frame = x_frame + 1.0;
        y_frame = y_frame + 1.0;

        testPixelColor = [self.yourImage colorAtPixel: CGPointMake (x_frame,y_frame)];
        hexTestPixelColor = [testPixelColor hexStringFromColor];

        NSLog(@"color at pixel (%.0f,%.0f): %@", x_frame,y_frame,hexTestPixelColor);

        if (![hexFrameColor isEqualToString: hexTestPixelColor]) {
            success = YES;
            NSLog (@"found frame border at (%.0f,%.0f)", x_frame,y_frame);
        }
    }

    CGRect newFrame;

    if (success) {

        newFrame = CGRectMake(x_frame,y_frame,self.yourImage.size.width-x_frame,self.yourImage.size.height-y_frame);
        NSLog(@"To crop image inside frame use: %@", NSStringFromCGRect(newFrame));


    } else {

        NSLog (@"couldn't define frame width");
    }

Этот метод проверяет изображение на наличие рамки.к середине изображения.

Примечание:

ColorAtPixel не является частью UIKit.Вы можете получить его в OBShapedButton Оле Бегеманна .

hexStringFromColor не является частью UIKit.Эту категорию вы можете найти в uicolor-utilities .

Для обрезки UIImage вы можете найти много способов здесь, на SO, но это не является частью вашего вопроса.

Этот код был протестирован с изображением:

image with border

Вывод был:

оригинальный размер: {314, 451}

цвет рамки: 980C0C

цвет в пикселе (2,2): 980C0C

цвет в пикселе (3,3): 980C0C

цвет в пикселе (4,4): 980C0C

цвет в пикселе (5,5): 980C0C

цвет в пикселе (6,6): 414429

найдена граница рамки в (6,6)

Чтобы обрезать изображение внутри фрейма, используйте: {{6, 6}, {308, 445}}

ПРИМЕЧАНИЕ: этот метод будет работать только в том случае, если рамка выполнена из точно такого же цвета,Некоторые границы в (сжатых) .jpg изображениях могут иметь границы, где цвет слегка меняется.Для этого вам следует использовать алгоритм, который проверяет сходство цветов - но это совершенно другая тема.

Также этот код написан для изображений с одинаковой толщиной рамки со всех сторон.Я уверен, что вы сможете изменить код для случаев, когда толщина рамки сверху / снизу отличается от толщины слева / справа.

0 голосов
/ 07 марта 2012

Чтобы получить кадр изображения так просто:

CGRect myFrame = myUIImageView.frame;

Это то, что вы просите?

...