Pergunta

Eu tenho um programa que pode abrir documentos TIFF e exibi-los. Estou usando setFlipped: SIM.

Se eu só estou lidando com arquivos de imagem única página, eu posso fazer

[image setFlipped: YES];

e que, para além da vista sendo capotou, parece desenhar a imagem corretamente.

No entanto, por alguma razão, definindo a virada da imagem não parece afetar a flippedness das representações individuais.

Isso é relevante porque as imagens múltiplas de um TIFF de várias páginas parecem aparecer como diferentes "representações" da mesma imagem. Então, se eu desenhar a imagem, ele capotou, mas se eu desenhar uma representação específica, não é invertida. Eu também não consigo descobrir como escolher qual a representação é o padrão que é atraída quando você chamar a NSImage.

obrigado.

Foi útil?

Solução 2

Eu acredito que a resposta é que sim, diferentes páginas são representações separadas, e a maneira correta de lidar com eles é transformá-las em imagens com:

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

Outras dicas

Você não deve usar o -setFlipped: método para controlar a forma como a imagem é desenhada. Você deve usar uma transformação com base na-ness virada do contexto que você está desenhando em. Algo assim (a categoria em 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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top