Question

J'ai un programme qui peut ouvrir des documents TIFF et les afficher. J'utilise setFlipped: OUI.

Si je suis juste traiter des fichiers d'images de page, je peux faire

[image setFlipped: YES];

et que, en plus de la vue étant renversé, semble dessiner l'image correctement.

Cependant, pour une raison quelconque, le réglage de l'image basculée ne semble pas affecter la flippedness des représentations individuelles.

Ceci est important parce que les multiples images d'une image TIFF de plusieurs pages semblent apparaître comme différents des « représentations » de la même image. Donc, si je dessine juste l'image, il est renversé, mais si je dessine une représentation spécifique, il n'est pas retourné. Je peux aussi semble ne pas comprendre comment choisir quelle représentation est celui par défaut qui est dessiné lorsque vous dessinez la NSImage.

merci.

Était-ce utile?

La solution 2

Je crois que la réponse est que oui, les différentes pages sont des représentations distinctes, et la bonne façon de les traiter est de les transformer en images avec:

NSImage *im = [[NSImage alloc] initWithData:[representation TIFFRepresentation]];
[im setFlipped:YES];

Autres conseils

Vous ne devriez pas utiliser la -setFlipped: méthode pour contrôler la façon dont l'image est dessinée. Vous devez utiliser un transform basé sur la ness du contexte basculée vous dessinez dans. Quelque chose comme ça (une catégorie sur NSImage):

@implementation NSImage (FlippedDrawing)
- (void)drawAdjustedInRect:(NSRect)dstRect fromRect:(NSRect)srcRect operation:(NSCompositingOperation)op fraction:(CGFloat)delta
{
    NSGraphicsContext* context = [NSGraphicsContext currentContext];
    BOOL contextIsFlipped      = [context isFlipped];

    if (contextIsFlipped)
    {
        NSAffineTransform* transform;

        [context saveGraphicsState];

        // Flip the coordinate system back.
        transform = [NSAffineTransform transform];
        [transform translateXBy:0 yBy:NSMaxY(dstRect)];
        [transform scaleXBy:1 yBy:-1];
        [transform concat];

        // The transform above places the y-origin right where the image should be drawn.
        dstRect.origin.y = 0.0;
    }

    [self drawInRect:dstRect fromRect:srcRect operation:op fraction:delta];

    if (contextIsFlipped)
    {
        [context restoreGraphicsState];
    }

}
- (void)drawAdjustedAtPoint:(NSPoint)point
{
    [self drawAdjustedAtPoint:point fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
}

- (void)drawAdjustedInRect:(NSRect)rect
{
    [self drawAdjustedInRect:rect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
}

- (void)drawAdjustedAtPoint:(NSPoint)aPoint fromRect:(NSRect)srcRect operation:(NSCompositingOperation)op fraction:(CGFloat)delta
{
    NSSize size = [self size];
    [self drawAdjustedInRect:NSMakeRect(aPoint.x, aPoint.y, size.width, size.height) fromRect:srcRect operation:op fraction:delta];
}
@end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top