如何设置像素透明和非透明后

时间:2012-05-29 16:18:50

标签: iphone objective-c ios

我有一个代码,它改变了UIImage中的像素。我需要将触摸位置的像素设置为透明,之后再触摸那里时非透明。我该怎么办?

代码

//It create new image with changed pixels
- (UIImage*)fromImage:(UIImage*)source
          colorBuffer:(NSArray *)colors erase:(BOOL)eraser
{
    CGContextRef ctx;
    CGImageRef imageRef = [source CGImage];
    NSUInteger width = CGImageGetWidth(imageRef);
    NSUInteger height = CGImageGetHeight(imageRef);
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    byte *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);

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

    int byteIndex = 0;


    for (int ii = 0 ; ii < width * height ; ++ii)
    {
        if(eraser)
        {
            // SET PIXEL TRANSPARENT
        }
        else
        {
           //SET PIXEL NON-TRANSPARENT
        }
    }

    ctx = CGBitmapContextCreate(rawData,
                                CGImageGetWidth( imageRef ),
                                CGImageGetHeight( imageRef ),
                                8,
                                bytesPerRow,
                                colorSpace,
                                kCGImageAlphaPremultipliedLast ); 
    CGColorSpaceRelease(colorSpace);

    imageRef = CGBitmapContextCreateImage (ctx);
    UIImage* rawImage = [UIImage imageWithCGImage:imageRef];  
    CGImageRelease(imageRef);

    CGContextRelease(ctx);  
    free(rawData);

    return rawImage;
}

0 个答案:

没有答案