2012-03-21 4 views
2

У меня есть этот код:IOS: использовать .png, чтобы цвет в представлении

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
mouseSwiped = YES; 

UITouch *touch = [touches anyObject]; 
CGPoint currentPoint = [touch locationInView:drawImage]; 

UIGraphicsBeginImageContext(drawImage.frame.size); 
[drawImage.image drawInRect:CGRectMake(0, 0, drawImage.frame.size.width, drawImage.frame.size.height)]; 
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 15.0); 

CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0, 0, 0, 1.0); //black 

CGContextBeginPath(UIGraphicsGetCurrentContext()); 
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); 
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y); 
CGContextStrokePath(UIGraphicsGetCurrentContext()); 
drawImage.image = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

lastPoint = currentPoint; 
} 

с этим кодом I цвета в представлении с черной линией, но я хочу, чтобы цвет с определенным PNG (как например, кисть); и имеют особый эффект; какие изменения я должен делать?

ответ

0

Если ур растрового изображения png имеет только один цвет, то вы можете установить это значение rgb.Else, если u хотите нарисовать png как путь, используйте тот же метод, который используется для рисования линии с использованием точек. Наложение продолжения размещения точек wil дайте u line, попытайтесь добиться этого, разместив png-изображения. Я имею в виду здесь ур один png ведет себя как точка.

+0

Вы можете оставить мне пример? – CrazyDev

+0

Мне жаль, что я не смогу помочь с некоторыми примерами. Я никогда не пробовал это раньше, но это было возможным решением, которое пришло мне в голову при первом взгляде. – Allamaprabhu

0
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), r, g, b, alpha); 
in your code u set r g b -->0 
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0, 0, 0, 1.0); 

that why its coming in black color, u need to set some value e.g 
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 20, 50, 10, 1.0); 
2

Я написал метод, чтобы получить цвет из CGPoint в изображении: ImageOperations.h:

+ (UIColor *)getColorFromImage:(UIImage*)image atX:(int)x andY:(int)y; 

ImageOperations.m

+ (UIColor *)getColorFromImage:(UIImage*)image atX:(int)x andY:(int)y { 
    CGImageRef imageRef = [image CGImage]; 
    NSUInteger width = CGImageGetWidth(imageRef); 
    NSUInteger height = CGImageGetHeight(imageRef); 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    unsigned char *rawData = calloc(height * width * 4, sizeof(unsigned char)); 
    NSUInteger bytesPerPixel = 4; 
    NSUInteger bytesPerRow = bytesPerPixel * width; 
    NSUInteger bitsPerComponent = 8; 
    CGContextRef context = CGBitmapContextCreate(rawData, width, height, 
               bitsPerComponent, bytesPerRow, colorSpace, 
               kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 
    CGColorSpaceRelease(colorSpace); 

    CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef); 
    CGContextRelease(context); 

    int byteIdx = (bytesPerRow * y) + x * bytesPerPixel; 

    CGFloat red = (rawData[byteIdx]  * 1.0)/255.0; 
    CGFloat green = (rawData[byteIdx + 1] * 1.0)/255.0; 
    CGFloat blue = (rawData[byteIdx + 2] * 1.0)/255.0; 
    CGFloat alpha = (rawData[byteIdx + 3] * 1.0)/255.0; 
    byteIdx += 4; 

    UIColor *acolor = [UIColor colorWithRed:red/255.f 
             green:green/255.f 
             blue:blue/255.f  
             alpha:alpha/255.f];  
    free(rawData); 

    return acolor; 
} 

Вызов метода выглядит следующим образом :

UIColor *myColor= [ImageOperations getColorFromImage:myImage atX:cgPoint.x andY:cgPoint.y]; 

self.myView.backgroundColor = myColor; 

Надеюсь, это поможет.

+0

нет, вы не понимаете мою проблему; Я хочу, чтобы цвет выглядел так, как будто я использую кисть вместо простой точки !!! – CrazyDev

+0

Ваш вопрос очень расплывчатый, и нет причин расстраиваться. Я понял, что вы пытаетесь получить цвет от png (изображения) и используете этот цвет для установки цвета фона для UIView. Если это неверно, отредактируйте свой вопрос. –

+0

Я опубликовал пример, который показывает, как окрашивать с помощью простой строки, затем я хочу раскрасить с помощью png – CrazyDev

0

Вы можете использовать цвет шаблон или шаблон хода Чтобы установить цветовую палитру:

Пожалуйста, убедитесь, что изображение 320х480 размер

CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), [UIColor colorWithPatternImage:myimage].CGColor);