Frage

Ich habe ein Programm bekommt, die sie TIFF-Dokumente und Anzeigen öffnen können. Ich verwende setFlipped: JA.

Wenn ich zu tun habe nur mit einseitigem Bild-Dateien, kann ich

[image setFlipped: YES];

und dass zusätzlich zu der Ansicht gekippt wird, scheint das Bild korrekt zu ziehen.

Doch aus irgendeinem Grund, die Einstellung der des Bildes gespiegelt scheint nicht das flippedness der einzelnen Darstellungen zu beeinflussen.

Dies ist relevant, weil die mehr Bilder von einer mehrseitigen TIFF scheinen als andere „Darstellungen“ des gleichen Bildes zu erscheinen. Also, wenn ich nur das Bild zieht, wird es umgedreht, aber wenn ich eine bestimmte Darstellung zeichnen, ist es nicht leicht geschlagen. Ich kann auch nicht scheinen, um herauszufinden, wie man wählen, welche Darstellung der Standard ist, die gezogen werden, wenn Sie die NSImage ziehen.

Dank.

War es hilfreich?

Lösung 2

Ich glaube, die Antwort ist, dass Ja, verschiedene Seiten sind separate Darstellungen und die richtige Art und Weise mit ihnen zu umgehen ist, sie in Bilder zu verwandeln mit:

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

Andere Tipps

Verfahren zu steuern, wie das Bild gezeichnet wird:

Sie sollten nicht die -setFlipped verwenden. Sie sollten auf der klappten ness des Kontextes eine Transformation verwenden basierend Sie in zeichnen. So etwas wie dies (eine Kategorie auf 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top