Как я могу нарисовать изображение? - PullRequest
0 голосов
/ 22 ноября 2011

Я программирую на цель-с.У меня есть изображение строки (см. Ниже) (1 x 30) пикселей.

enter image description here

Как я могу получить UIImage (50 x 30) (см. Ниже) из этой строки?

enter image description here

Ответы [ 4 ]

0 голосов
/ 22 ноября 2011

Вы можете использовать +[UIColor colorWithPatternImage] в iOS:

NSString *path = 
    [[NSBundle mainBundle] pathForResource:@"<# the pattern file #>" ofType:@"png"];
UIColor *patternColor = [UIColor colorWithPatternImage:
    [UIImage imageWithContentsOfFile:path]];
/* use patternColor anywhere as a regular UIColor instance */

Работает лучше с бесшовными узорами. Для OSX вы можете использовать метод +[NSColor colorWithPatternImage].

0 голосов
/ 22 ноября 2011

Если вы просто хотите нарисовать изображение, вы можете попробовать метод UIImage * drawInRect:.

Обычно вы хотите вызывать его из пользовательского UIView drawRect:.

Существуют разные подходы к рисованию в Какао (и Cocoa-Touch), так что вот руководство Apple по рисованию и печати для iOS .

0 голосов
/ 22 ноября 2011

, если ваша линия имеет простой цвет, попробуйте этот ленивый метод:

UIImageView *line = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 50, 30)];
[line setImage:[UIImage imageNamed:@"your gray line"]];
[self.view addSubView:line];
0 голосов
/ 22 ноября 2011

Создайте CGBitmapContext размером 50 * 30, который вы можете просто нарисовать в контексте с помощью CGContextDrawImage.

После этого используйте CGBitmapContextCreateImage и [UIImage imageWithCGImage:] для создания UIImage

CGContextRef CreateBitmapContext(int pixelsWide, int pixelsHigh)
{
    CGContextRef    context = NULL;
    CGColorSpaceRef colorSpace;
    int             bitmapByteCount;
    int             bitmapBytesPerRow;

    bitmapBytesPerRow   = (pixelsWide * 4); // RGBA
    bitmapByteCount     = (bitmapBytesPerRow * pixelsHigh);

    colorSpace = CGColorSpaceCreateDeviceRGB();
    context = CGBitmapContextCreate (NULL,
                                     pixelsWide,
                                     pixelsHigh,
                                     8,      // bits per component
                                     bitmapBytesPerRow,
                                     colorSpace,
                                     kCGImageAlphaPremultipliedLast);
    NSCAssert(context != NULL, @"cannot create bitmap context");
    CGColorSpaceRelease( colorSpace );

    return context;
}

CGContextRef context = CreateBitmapContext(50, 30);
UIImage *yourLineImage = ...;
CGImageRef cgImg = [yourLineImage CGImage];
for (int i = 0; i < 50; i++) {
    CGRect rect;
    rect.origin.x = i;
    rect.origin.y = 0;
    rect.size.width = 1;
    rect.size.height = 30;
    CGContextDrawImage(context, rect, cgImg);
}
CGImageRef output = CGBitmapContextCreateImage(context);
UIImage *result = [UIImage imageWithCGImage:output];
...