在iphone上使用png更改像素数据时遇到麻烦 - 在模拟器上使用

时间:2010-05-21 00:31:15

标签: iphone

我正在尝试更改像素的颜色(变亮或变暗)而不使用CGDataProviderCopyData更改Alpha通道的值。我保持每第4个databyte不受影响。它适用于iphone模拟器,但是在真实的情况下,当我增加其他像素的值时,alpha会变白。我试过改变第一个字节,或第二个,或第三个。有谁知道发生了什么事? 基本代码是从Jorge借来的。我喜欢这种简单的方法 - 我是新手。但我想让它与png图像一起工作,具有一定的透明度。

这是Jorge的大部分代码:

CFDataRef CopyImagePixels(CGImageRef inImage){
    return CGDataProviderCopyData(CGImageGetDataProvider(inImage));
}

CGImageRef img=originalImage.CGImage;
    CFDataRef dataref=CopyImagePixels(img);
    UInt8 *data=(UInt8 *)CFDataGetBytePtr(dataref);
    int length=CFDataGetLength(dataref);
    for(int index=0;index<length;index+=4){
        // BRIGHTNESS
        for(int i=0;i<3;i++){
            if(data[index+i]+value<0){
                data[index+i]=0;
            }else{
                if(data[index+i]+value>255){
                    data[index+i]=255;
                }else{
                    data[index+i]+=value;
                }
            }
        }


    }
    size_t width=CGImageGetWidth(img);
    size_t height=CGImageGetHeight(img);
    size_t bitsPerComponent=CGImageGetBitsPerComponent(img);
    size_t bitsPerPixel=CGImageGetBitsPerPixel(img);
    size_t bytesPerRow=CGImageGetBytesPerRow(img);
    CGColorSpaceRef colorspace=CGImageGetColorSpace(img);
    CGBitmapInfo bitmapInfo=CGImageGetBitmapInfo(img);
    CGImageAlphaInfo alphaInfo = kCGBitmapAlphaInfoMask(img);
    NSLog(@"bitmapinfo:  %d",bitmapInfo);
    CFDataRef newData=CFDataCreate(NULL,data,length);
    CGDataProviderRef provider=CGDataProviderCreateWithCFData(newData);
    CGImageRef newImg=CGImageCreate(width,height,bitsPerComponent,bitsPerPixel,bytesPerRow,colorspace,bitmapInfo,provider,NULL,true,kCGRenderingIntentDefault);
    [iv setImage:[UIImage imageWithCGImage:newImg]];
    CGImageRelease(newImg);
    CGDataProviderRelease(provider);

1 个答案:

答案 0 :(得分:0)

我相信iPhone上的字节顺序是“优化的”,但在模拟器上却没有。详情请http://iphonedevelopment.blogspot.com/2008/10/iphone-optimized-pngs.html