Pregunta

Tengo un programa que puede abrir documentos TIFF y mostrarlos. Estoy usando setFlipped: SÍ.

Si estoy sólo se ocupan de una sola página archivos de imagen, lo que puedo hacer

[image setFlipped: YES];

y que, además de la vista que se está volteado, parece dibujar la imagen correctamente.

Sin embargo, por alguna razón, estableciendo el volteado de la imagen no parece afectar a la flippedness de las representaciones individuales.

Esto es relevante porque las múltiples imágenes de un archivo TIFF de varias páginas parecen aparecer como diferentes "representaciones" de la misma imagen. Por lo tanto, si acabo de dibujar la imagen, se volcó, pero si dibujo una representación específica, no se da la vuelta. También me parece que no puede encontrar la manera de la que eligió la representación es la que viene por defecto que se ve arrastrado cuando se dibuja la NSImage.

gracias.

¿Fue útil?

Solución 2

Creo que la respuesta es que sí, diferentes páginas son representaciones separadas, y la forma correcta de tratar con ellos es para convertirlas en imágenes con:

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

Otros consejos

No se debe utilizar el -setFlipped: Método para controlar cómo se dibuja la imagen. Debe utilizar una transformación basada en la volteada-dad del contexto que está dibujando en. Algo como esto (una categoría en 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top