2010-05-21 2 views
0

CGDataProviderCopyData를 사용하여 알파 채널의 값을 변경하지 않고 픽셀의 색을 밝게하거나 어둡게하려고합니다. 나는 매 4 번째 databyte를 손대지 않게 남겨 둡니다. 아이폰 시뮬레이터는 잘 동작하지만 다른 픽셀의 값을 증가 시키면 알파는 흰색으로 바뀝니다. 첫 번째 바이트 또는 두 번째 또는 세 번째 바이트 만 변경하려고했습니다. 아무도 무슨 일이 일어나고 있는지 전혀 생각하지 못했습니까? 기본 코드는 Jorge에서 빌려 왔습니다. 나는이 간단한 접근법을 좋아합니다. 하지만 일부 투명성을 가진 png 이미지와 함께 작동하도록하고 싶습니다. 여기iphone의 png에서 알파를 사용하여 픽셀 데이터를 변경할 때의 문제 - 시뮬레이터 사용시

호르헤에 의해 대부분의 코드입니다 :

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

나는 바이트 순서가 아닌 시뮬레이터에 아이폰의 "최적화"믿습니다. 여기 세부 정보는 http://iphonedevelopment.blogspot.com/2008/10/iphone-optimized-pngs.html

+0

귀하의 통찰력에 감사드립니다. --- 그냥 등록 - 원래 질문을 ... 나는 아이폰이 알파 채널을 미리 곱하여 빠른 표시를 위해 png를 조정한다고 생각합니다. 모든 색상에 알파 채널/128을 곱하면 괜찮은 결과를 얻었습니다. 이유는 모르지만 잘 작동하는 것 같습니다. 입력 해 주셔서 다시 한 번 감사드립니다. 나는 당신의 대답에 긍정적 인 평가를 줄 것이다. 그러나 나는 여기에서 새롭기 때문에 그것을 허락하지 않을 것이다. – Ted

관련 문제