2

我有一个动物图像,该图像具有白色背景,动物的形状是黑色轮廓。这是固定在我的 .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但我不知道在这种情况下如何实现它。

4

0 回答 0