سؤال

لدي برنامج يمكنه فتح مستندات 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