1

2 つの画像を背景画像にマージしようとしています。これは、Retina 以外の Mac では正常に機能します。

結果の画像は、元の背景画像のサイズになります。しかし、MacBook Pro Retina では、結果の画像が 2 倍になります。10.8以降、その問題の原因を解決するために使用する必要があることを読みましたimageWithSize/ Retinaサポート画像はピクセル単位で測定されなくなりました。私たちが知っているように、それはポイントです。

これを解決するためにコードを変更する方法がわかりません。

私がこれまでに持っているもの:

    NSSize size =  background.size  ;
    GLsizei width = (GLsizei)size.width;
    GLsizei height = (GLsizei)size.height;
    NSBitmapImageRep* imgRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL pixelsWide:width pixelsHigh:height bitsPerSample:8 samplesPerPixel:3 hasAlpha:NO isPlanar:NO colorSpaceName:NSDeviceRGBColorSpace bytesPerRow:width*3 bitsPerPixel:0];  

#ifdef __MAC_10_8

    NSImage* backgroundWrapper = [NSImage imageWithSize:size flipped:YES drawingHandler:^(NSRect dstRect){ return [imgRep drawInRect:dstRect]; }];
    NSPoint backgroundPoint;
    backgroundPoint.x = 0;
    backgroundPoint.y = 0;
    [backgroundWrapper lockFocusFlipped:YES];
    [background drawAtPoint:backgroundPoint fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
    [firstImage firstImage fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
    [backgroundWrapper unlockFocus];

    NSBitmapImageRep *bmpImageRep = [[NSBitmapImageRep alloc]initWithData:[backgroundWrapper TIFFRepresentation]];
    [backgroundWrapper addRepresentation:bmpImageRep];
#else
    [background lockFocusFlipped:YES];
    [firstImage drawAtPoint:firstImagePoint fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
    [background unlockFocus];
    NSBitmapImageRep *bmpImageRep = [[NSBitmapImageRep alloc]initWithData:[background TIFFRepresentation]];
    [background addRepresentation:bmpImageRep];
#endif

    NSData *data = [bmpImageRep representationUsingType: NSPNGFileType properties: nil];

これを Retina ディスプレイで動作させるにはどうすればよいですか?

編集

私もこれを試しました:

- (NSImage )drawImage:(NSImage)background with:(NSImage*)firstImage { 

    return [NSImage imageWithSize:NSMakeSize(3200, 2000) flipped:NO drawingHandler:^BOOL(NSRect dstRect) { 
        NSPoint backgroundPoint; backgroundPoint.x = 0; 
        backgroundPoint.y = 0; 
        [background drawAtPoint:backgroundPoint fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0]; 
        [firstImage drawAtPoint:backgroundPoint fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0]; 
        return true; 
    }];
}

しかし、結果の画像は6400x4000pxです

4

0 に答える 0