2010-10-15 9 views
0

maintenant im travailler sur une application qui accepte cgimageref, traiter les pixels de l'image et renvoie le cgimageref traité. Pour vérifier comment cela fonctionne, j'ai simplement écrit un code pour passer le cgimageref et attend la même image à renvoyer sans être traité. Mais le problème est que je ne récupère pas l'image exacte. la couleur de l'image résultante est complètement changée. Si ce n'est pas la bonne façon de le faire alors SVP me suggérer une meilleure façon de le faire. Voici le codeipad, sdk, CGBitmapContextCreate

- (CGImageRef) invertImageColor :(CGImageRef) imageRef { 
    CFDataRef dataRef = CGDataProviderCopyData(CGImageGetDataProvider(imageRef)); 
    UInt8 * m_PixelBuf = (UInt8 *) CFDataGetBytePtr(dataRef); 
    // my editing code goes here but for testing this part is omitted. i will it later    
    //when this issue is solved. 
    CGContextRef ctx = CGBitmapContextCreate(m_PixelBuf, 
             CGImageGetWidth(imageRef), 
             CGImageGetHeight(imageRef), 
        CGImageGetBitsPerComponent(imageRef), 
        CGImageGetBytesPerRow(imageRef), 
              CGImageGetColorSpace(imageRef), 
              kCGImageAlphaPremultipliedFirst); 

    CGImageRef newImageRef = CGBitmapContextCreateImage (ctx); 
    CGContextRelease(ctx); 

    return newImageRef;} 

Répondre

1

Vous supposez que l'alpha de l'image d'entrée a été prémultipliée et stockée avant les composants de couleur. Ne supposez pas cela. Obtenez l'information bitmap de l'image et transmettez-la à CGBitmapContextCreate.

Notez que CGBitmapContext ne fonctionne pas avec tous les formats de pixels possibles. Si votre image d'entrée est dans un format de pixel que CGBitmapContext n'aime pas, vous devrez juste utiliser un tampon séparé et dessiner l'image d'entrée dans le contexte.