Вопрос

У меня есть программа, которая может открывать документы TIFF и отображать их.Я использую setFlipped:YES.

Если я просто имею дело с одностраничными файлами изображений, я могу сделать

[image setFlipped: YES];

и это, помимо перевернутого представления, похоже, правильно рисует изображение.

Однако по какой-то причине установка перевернутого изображения, похоже, не влияет на перевернутость отдельных представлений.

Это актуально, поскольку несколько изображений многостраничного TIFF выглядят как разные «представления» одного и того же изображения.Итак, если я просто рисую ИЗОБРАЖЕНИЕ, оно переворачивается, но если я рисую конкретное представление, оно не переворачивается.Я также не могу понять, как выбрать представление, которое будет отображаться по умолчанию, когда вы рисуете NSImage.

Спасибо.

Это было полезно?

Решение 2

Я считаю, что ответ таков: да, разные страницы — это отдельные представления, и правильный способ справиться с ними — превратить их в изображения с помощью:

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

Другие советы

Вам не следует использовать -setFlipped:метод для управления тем, как отрисовывается изображение.Вам следует использовать преобразование, основанное на перевернутом контексте, в который вы рисуете.Что-то вроде этого (категория на 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top