我正在尝试更改像素的颜色(变亮或变暗)而不使用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);
答案 0 :(得分:0)
我相信iPhone上的字节顺序是“优化的”,但在模拟器上却没有。详情请http://iphonedevelopment.blogspot.com/2008/10/iphone-optimized-pngs.html