通过点击Objective-C在图像中绘制渐变?

时间:2013-09-12 07:43:28

标签: ios iphone ipad

我有一个动物图像,该图像有白色背景,动物的形状是黑色轮廓。这在我的.xib中的图像视图中得到修复。

现在我想在图像上绘画,但仅限于特定的封闭部分。

假设用户触摸到手,那么只有手会填充渐变。图像的其余部分将保持不变。

- (UIImage*)imageFromRawData:(unsigned char *)rawData
{
    NSUInteger bitsPerComponent = 8;
    NSUInteger bytesPerPixel = 4;
    NSUInteger bytesPerRow = bytesPerPixel * self.imageDoodle.image.size.width;
    CGImageRef imageRef = [self.imageDoodle.image CGImage];
    CGColorSpaceRef colorSpace = CGImageGetColorSpace(imageRef);
    CGContextRef context = CGBitmapContextCreate(rawData,self.imageDoodle.image.size.width,
    self.imageDoodle.image.size.height,bitsPerComponent,bytesPerRow,colorSpace, 
    kCGImageAlphaPremultipliedLast);
    imageRef = CGBitmapContextCreateImage (context);
    UIImage* rawImage = [UIImage imageWithCGImage:imageRef];
    CGContextRelease(context);
    CGImageRelease(imageRef);
    return rawImage;
 }

-(unsigned char*)rawDataFromImage:(UIImage *)image
{
    CGImageRef imageRef = [image CGImage];
    NSUInteger width = CGImageGetWidth(imageRef);
    NSUInteger height = CGImageGetHeight(imageRef);
    NSLog(@"w=%d,h=%d",width,height);
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    unsigned char *rawData = malloc(height * width * 4);
    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);
    return rawData;
}

我需要在哪里更改代码才能支持此功能?

这可以由UIBezierPath实现,但在这种情况下我不知道如何实现它。

0 个答案:

没有答案