Domanda

Ho un programma in grado di aprire i documenti TIFF e li visualizza. Sto utilizzando setFlipped: SI.

Se sto solo trattare con i file di immagine singola pagina, posso fare

[image setFlipped: YES];

e che, oltre alla vista di essere capovolto, sembra disegnare l'immagine correttamente.

Tuttavia, per qualche motivo, l'impostazione del capovolto dell'immagine non sembra influenzare la flippedness delle singole rappresentazioni.

Questo è importante perché le immagini multiple di un TIFF multipagina sembrano apparire come diversi "rappresentazioni" della stessa immagine. Quindi, se ho appena disegnare l'immagine, è capovolto, ma se ne traggo una rappresentazione specifica, non è capovolto. Anche io non riesco a capire come ha scelto, che la rappresentazione è quella di default che viene disegnato quando si disegna il NSImage.

Grazie.

È stato utile?

Soluzione 2

Credo che la risposta è che sì, diverse pagine sono rappresentazioni separati, e il modo corretto di trattare con loro è quello di trasformarle in immagini con:

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

Altri suggerimenti

Si consiglia di non utilizzare il -setFlipped: metodo per controllare come l'immagine viene disegnata. Si consiglia di utilizzare una trasformazione basato sul capovolte-ness del contesto si sta disegnando in. Qualcosa di simile (una categoria a 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top