2009-08-20 2 views
0

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

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

[image setFlipped: YES]; 

и что, в дополнение к представлению быть перевернуто, кажется, сделать изображение правильно.

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

Это актуально, поскольку множественные изображения многостраничного TIFF кажутся отображаемыми как разные «представления» одного и того же изображения. Итак, если я просто рисую IMAGE, он перевернулся, но если я нарисую конкретное представление, оно не будет переворачиваться. Я также не могу понять, как выбрать, какое представление является стандартным, которое нарисовано, когда вы рисуете NSImage.

спасибо.

ответ

0

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

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

Вы не должны использовать -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 
+0

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

Смежные вопросы