2016-03-27 14 views
1

私は操作したCGImageを持っています。ファイルに書き込むか、ファイルに書き込むのに適した表現でNSDataとなります。私はOSX & iOSでこれを行う方法を知っていますが、Core Graphicsの呼び出しではなく、プラットフォームに依存する呼び出しのみを使用しています。プラットフォームに依存しない方法でこれを行う方法に関するドキュメントは見つかりません。ここでは、私が持っているものです。UIImage/NSImageファイル表現の代わりのコアグラフィックス

func newImageData() -> NSData? { 
    var newImageRef: CGImage 
    // ... 
    // Create & manipulate newImageRef 
    // ... 
    #if os(iOS) 
     let newImage = UIImage(CGImage: newImageRef, scale: 1, orientation: 0) 
     return UIImagePNGRepresentation(newImage) 
    #elseif os(OSX) 
     let newImage = NSImage(CGImage: newImageRef, size: NSSize(width: width, height: height)) 
     return newImage.TIFFRepresentation 
    #endif 
} 

だけ明確にする - 上記のコードは正常に動作し、私はCGで他のすべてをやったことだけでイライラしています、私は、ファイルの表現を取得するために、それからステップアウトする必要があります。

最後に、私は1つのプラットフォームは、PNGおよび他のTIFFを返すことを気にしない - 実際には、これはMKTileOverlayのためにタイルを作成しているので、どちらかが行います...

答えて

2

正しい方向に私を向けるために@Mattに多くのお礼を - ImageIO framework。再び、

let dataOut = CFDataCreateMutable(nil, CFIndex(byteCount)) 
if let iDest = CGImageDestinationCreateWithData(dataOut, kUTTypePNG, 1, nil) {    
    let options: [NSObject: AnyObject] = [ 
       kCGImagePropertyOrientation : 1, // Top left 
       kCGImagePropertyHasAlpha : true, 
       kCGImageDestinationLossyCompressionQuality : 1.0 
      ] 

    CGImageDestinationAddImage(iDest, newImageRef, options) 
    CGImageDestinationFinalize(iDest) 
    return dataOut 
} else { 
    print("Failed to create image destination") 
    return nil 
} 
2

あなたは探していますImageIO frameworkはどちらのプラットフォームでも同じです(また、画像をファイルに保存する方がはるかに良い方法です)。

+0

どうもありがとう:私は必要なもの

は、このでした!ドキュメントはちょっと簡潔です - 特に実際にファイルに書きたくない場合は特に! – Grimxn

+0

@Grimxnここのコード例(私の本):https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch23p829imageIO/ch36​​p1084imageIO/ViewController.swift – matt

+0

興味深い - 私はCFDictionaryの翻訳に慎重なビット!あなたの本を買わなければならない。今では、MKTileOverlaysをオンザフライでインバウンドに変換する方法があります。ありがとう! – Grimxn

関連する問題