2010-02-13 8 views
0

J'utilise le code suivant pour modifier les pixels d'une image. Le problème que j'ai est la couleur des images sont corrects. Avez-vous une idée du problème?modifier les pixels d'un CGImageRef

CGImageRef inImage = img.CGImage;
CGContextRef ctx;

CFDataRef m_DataRef; 
    m_DataRef = CGDataProviderCopyData(CGImageGetDataProvider(inImage)); 
    UInt8 * m_PixelBuf = (UInt8 *) CFDataGetBytePtr(m_DataRef); 
// Byte tmpByte; 
    int length = CFDataGetLength(m_DataRef); 

    for (int index = 0; index < length; index += 4) 
    { 
    // DO Stuff 

    } 

    ctx = CGBitmapContextCreate(m_PixelBuf, 
           CGImageGetWidth(inImage), 
           CGImageGetHeight(inImage), 
           8, 
           CGImageGetBytesPerRow(inImage), 
           CGImageGetColorSpace(inImage), 
           kCGImageAlphaPremultipliedFirst); 


    CGImageRef imageRef = CGBitmapContextCreateImage (ctx); 
    UIImage* rawImage = [UIImage imageWithCGImage:imageRef]; 

    CGContextRelease(ctx); 

+0

Peut-être que vous devriez montrer ce que vous faites avec 'DO Stuff' .. Alao, pourquoi ne pas faire une mini expérience et définir tous les pixels en rouge. Ensuite, vous découvrirez probablement si vous leur adressez la question ou non. –

+0

Même si je ne fais rien, l'image est modifiée. Le problème ne concerne pas le code de traitement. –

+0

Comment est-il modifié? Les canaux de couleur sont-ils remplacés ou l'image est-elle déformée? Avez-vous essayé de remplacer kCGImageAlphaPremultipliedFirst par le résultat de CGImageGetAlphaInfo()? – Costique

Répondre

0

Essayez d'utiliser kCGImageAlphaPremultipliedLast au lieu de kCGImageAlphaPremultipliedFirst.

Questions connexes