cocos2d 创建一个黑白纹理

@interface myGrayTexture : CCTexture2D

// @param exposure 曝光

+(id) textureWithFile:(NSString*) file exposure:(int) exposure;

@end



 

@implementation myGrayTexture

typedef enum {

    ALPHA = 0,

    BLUE = 1,

    GREEN = 2,

    RED = 3

} PIXELS;



+(UIImage*) getGrayImage:(NSString*) file  exposure:(int) exposure{

    

    UIImage* img = [UIImage imageNamed:file];

    if (nil == img) {

        return nil;

    }

    

    CGSize size = [img size];

    int width = size.width;

    int height = size.height;

	

    // the pixels will be painted to this array

    uint32_t *pixels = (uint32_t *) malloc(width * height * sizeof(uint32_t));

	

    // clear the pixels so any transparency is preserved

    memset(pixels, 0, width * height * sizeof(uint32_t));

	

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

	

    // create a context with RGBA pixels

    CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, width * sizeof(uint32_t), colorSpace,

                                                 kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedLast);

	

    // paint the bitmap to our context which will fill in the pixels array

    CGContextDrawImage(context, CGRectMake(0, 0, width, height), [img CGImage]);

	

    for(int y = 0; y < height; y++) {

        for(int x = 0; x < width; x++) {

            uint8_t *rgbaPixel = (uint8_t *) &pixels[y * width + x];

			

            // convert to grayscale using recommended method: http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale

            uint32_t gray = 0.3 * rgbaPixel[RED] + 0.59 * rgbaPixel[GREEN] + 0.11 * rgbaPixel[BLUE];

			

            

            // set the pixels to gray

            rgbaPixel[RED] = gray + (gray > 0 ? exposure : 0);

            rgbaPixel[GREEN] = gray + (gray > 0 ? exposure : 0);

            rgbaPixel[BLUE] = gray + (gray > 0 ? exposure : 0);

        }

    }

	

    // create a new CGImageRef from our context with the modified pixels

    CGImageRef image = CGBitmapContextCreateImage(context);

	

    // we're done with the context, color space, and pixels

    CGContextRelease(context);

    CGColorSpaceRelease(colorSpace);

    free(pixels);

	

    // make a new UIImage to return

    UIImage *resultUIImage = [UIImage imageWithCGImage:image];

	

    // we're done with image now too

    CGImageRelease(image);

	

    return resultUIImage;

}



+(id) textureWithFile:(NSString*) file exposure:(int) exposure{

    UIImage* img = [self getGrayImage:file exposure:exposure];

    if (img) {

        return  [[[myGrayTexture alloc] initWithImage:img] autorelease];

    }

    return nil;

}





@end


 

 

你可能感兴趣的:(cocos2d)