如何在iPhone上更改UIImage的背景颜色

3

提前致谢。 我使用了以下代码将UIImage的背景更改为红色。

-(void)changeColor
{
        UIImage *temp23=[UIImage imageNamed:@"leaf.png"];
        CGImageRef ref1=[self createMask:temp23];
        const float colorMasking[6] = {1.0, 2.0, 1.0, 1.0, 1.0, 1.0};
        CGImageRef New=CGImageCreateWithMaskingColors(ref1, colorMasking);
        UIImage *resultedimage=[UIImage imageWithCGImage:New];
}

-(CGImageRef)createMask:(UIImage*)temp
{
        CGImageRef ref=temp.CGImage;
        int mWidth=CGImageGetWidth(ref);
        int mHeight=CGImageGetHeight(ref);
        int count=mWidth*mHeight*4;
        void *bufferdata=malloc(count);

        CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
        CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
        CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;

        CGContextRef cgctx = CGBitmapContextCreate (bufferdata,mWidth,mHeight, 8,mWidth*4, colorSpaceRef, kCGImageAlphaPremultipliedFirst); 

        CGRect rect = {0,0,mWidth,mHeight};
        CGContextDrawImage(cgctx, rect, ref); 
        bufferdata = CGBitmapContextGetData (cgctx);

        CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, bufferdata, mWidth*mHeight*4, NULL);
        CGImageRef savedimageref = CGImageCreate(mWidth,mHeight, 8, 32, mWidth*4, colorSpaceRef, bitmapInfo,provider , NULL, NO, renderingIntent);
        CFRelease(colorSpaceRef);
        return savedimageref;
}

但是,如果我尝试改变成不同的颜色,我无法得到我需要改变的内容。我在这里尝试了不同的值const float colorMasking[6] = {1.0, 2.0, 1.0, 1.0, 1.0, 1.0};,但它仍然是红色的。我的图像背景是黑色的。有人可以帮助我做到这一点吗。

1个回答

0

你确定你正确地遮盖了你的图像吗?不要显示遮盖后的图像,而是在你的设备上只显示遮罩层,我认为你会发现遮罩层导致了你的红色问题。对于PNG文件,CGBitmapContextCreate看起来不正确。

kCGImageAlphaPremultipliedFirst

应该是(我相信)

kCGImageAlphaPremultipliedLast

对于一个PNG文件


谢谢您的回复。不,我已经尝试了使用kCGImageAlphaPremultipliedLast格式的png文件,但是这并没有产生影响。 - Sandy_ios

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接