2011-10-12 4 views
0

Est-ce que quelqu'un sait s'il est possible de faire le mode composite de couche de Photoshop "négatif multiplier"?Négatif Multipliez avec imagemagick?

Multiplier est possible, mais j'ai besoin de la voie négative.

MagickBooleanType aStat = MagickCompositeImage(magick_wand_local, magick_wand_local_comp, MultiplyCompositeOp, 0, 0); 

Merci

Répondre

1

bien. Je l'ai trouvé moi-même.

Il est ce qu'on appelle: ScreenCompositeOp

Certains code d'échantillon (non nettoyé!):

CGImageRef standardized = srcCGImage; //createStandardImage(srcCGImage); 

    // could use the image directly if it has 8/16 bits per component, 
    // otherwise the image must be converted into something more common (such as images with 5-bits per component) 
    // here we’ll be simple and always convert 
    const char *map = "ARGB"; // hard coded 
    const StorageType inputStorage = CharPixel; 

    NSData *srcData = (NSData *) CGDataProviderCopyData(CGImageGetDataProvider(standardized)); 

    const void *bytes = [srcData bytes]; 
    MagickWandGenesis(); 
    MagickWand * magick_wand_local= NewMagickWand(); 
    MagickBooleanType status = MagickConstituteImage(magick_wand_local, width, width, map, inputStorage, bytes); 
    if (status == MagickFalse) { 
     ThrowWandException(magick_wand_local); 
    }  
    /* 
    status = MagickOrderedPosterizeImage(magick_wand_local, "h8x8o"); 
    if (status == MagickFalse) { 
    ThrowWandException(magick_wand_local); 
    } 
    */ 

    //status = MagickThresholdImage(magick_wand_local, 100.0); 

    MagickWand * magick_wand_local_comp = NewMagickWand(); 
    NSString *file = @"winter_over.jpg"; 
    if(export == YES) { 
     file = @"winter_over_large.jpg"; 
    } 

    if(MagickReadImage(magick_wand_local_comp,[[[NSBundle mainBundle] pathForResource:file ofType:@""] UTF8String]) == MagickFalse) { 
     ExceptionType severity; 
     char *err = MagickGetException(magick_wand_local_comp, &severity); 
     printf("%s\n",err); 
     NSLog(@"error"); 
    } 

    MagickBooleanType aStat = MagickCompositeImage(magick_wand_local, magick_wand_local_comp, ScreenCompositeOp, 0, 0);  
    if(aStat == MagickFalse) { 
     NSLog(@"error"); 
    } 

    status = MagickModulateImage(magick_wand_local, 100, 29, 100); 



    if (status == MagickFalse) { 
     ThrowWandException(magick_wand_local); 
    } 

    const int bitmapBytesPerRow = (width * strlen(map)); 
    const int bitmapByteCount = (bitmapBytesPerRow * height); 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    char *trgt_image = malloc(bitmapByteCount); 
    status = MagickExportImagePixels(magick_wand_local, 0, 0, width, height, map, CharPixel, trgt_image); 
    if (status == MagickFalse) { 
     ThrowWandException(magick_wand_local); 
    } 
    magick_wand_local = DestroyMagickWand(magick_wand_local); 
    magick_wand_local_comp = DestroyMagickWand(magick_wand_local_comp); 
    MagickWandTerminus(); 
    CGContextRef context = CGBitmapContextCreate (trgt_image, 
                width, 
                height, 
                8, // bits per component 
                bitmapBytesPerRow, 
                colorSpace, 
                kCGImageAlphaPremultipliedFirst); 
    CGColorSpaceRelease(colorSpace); 
+0

Salut, il est possible d'avoir un exemple de code de celui-ci? je veux avoir un effet de retouche Photoshop sans négatif. Tnx – Safari

+1

posté quelques samplecode –

+0

Tnx pour votre commentaire. Ce code fonctionne sur l'effet multiplicateur? Je ne vois pas le MagickConstituteImage (magick_wand_local, magick_wand_local_comp, MultiplyCompositeOp, 0, 0) – Safari