2017-02-04 6 views
0

どのようにRGB画像をグレースケール色空間に変換できますか?私は... MacOSのためのiOS版が、非のためのコードの多くを見つけることができるとAppleのドキュメンテーションはスイフト3色空間macOS IOS

let width = image.size.width 
    let height = image.size.height 
    let imageRect = NSMakeRect(0, 0, width, height); 
    let colorSpace = CGColorSpaceCreateDeviceGray(); 


    let bits = image.representations.first as! NSBitmapImageRep; 
    bitmap!.representationUsingType(NSBitmapImageFileType.NSPNGFileType, properties: nil) 


    let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.none.rawValue); 
    let context = CGContext(data: nil, width: Int(width), height: Int(height), bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: bitmapInfo.rawValue); 
    context.draw(image.cgImage!, in : imageRect);// and this line is wrong obviously.. 

これは私がそうfar..justからコピー&ペースト持っているものです....すべての客観Cでありますインターネットは..しかし、私はさらに進んで行く方法については考えていません。

答えて

1

:迷惑あなたがNSImageCIImageの間で前後に変換する必要があることです。

how to create grayscale image from nsimage in swift?

Greyscale Image using COCOA and NSImage

Changing the Color Space of NSImage: The second reply

マイコード:

func saveImage(image:NSImage, destination:URL) throws{ 
    let rep = greyScale(image); 
    var data = rep.representation(using: NSJPEGFileType, properties: [:]); 
    try data?.write(to: destination); 

} 

// rgb2gray 
func greyScale(image: NSImage) -> NSBitmapImageRep{ 
    let w = image.size.width 
    let h = image.size.height 
    let imageRect : NSRect! = NSMakeRect(0,0, w, h); 
    let colourSpace : ColourSpace! = CGColorSpaceCreateDeviceGray(); 
    let context : CGContext! = CGContext(data: nil, width: Int(w), 
             height: Int(h), bitsPerComponent: 8, 
             bytesPerRow: 0, space: colorSpace, 
             bitmapInfo: CGImageAlphaInfo.none.rawValue);   

    context.draw(nsImageToCGImage(image: image), in: imageRect); 
    let greyImage : CGImage! = context.makeImage(); 

    return NSBitmapImageRep(cgImage: greyImage); 
} 


func nsImageToCGImage(image: NSImage) -> CGImage{ 
    if let imageData = image.tiffRepresentation as NSData! { 
     let imageSource : CGImageSource! = CGImageSourceCreateWithData(imageData, 
             nil); 
     let image = CGImageSourceCreateImageAtIndex(imageSource, 0, nil); 
     return image; 
    } 
    return nil; 
} 

私はまだ背後にある原理を理解しようとしています。

0

お試しくださいCIFilter。私は単純に次の3つのソースからコピーされます。この..私のコードを実行するための興味深い方法を発見した

import Cocoa 
import CoreImage 

let url = Bundle.main.url(forResource: "image", withExtension: "jpg")! 
let image = CIImage(contentsOf: url)! 

let bwFilter = CIFilter(name: "CIColorControls", withInputParameters: ["inputImage": image, "inputSaturation": 0.0])! 

if let ciImage = bwFilter.outputImage { 
    let rep = NSCIImageRep(ciImage: ciImage) 
    let nsImage = NSImage(size: rep.size) 
    nsImage.addRepresentation(rep) 
    // nsImage is now your black-and-white image 
} 
+0

[NSImageの色空間を変更する](http://stackoverflow.com/questions/3253521/changing-the-color-space-of-nsimage/42042573#42042573)色を変更する方法を教えてくださいスペース。私は最終的なマスキングステップに入っています。 – user3390652

+0

私が適切な方法でそれをやろうと努力しているのは、Appleのフレームワークが色空間を定義していることがわかったからです。私は他の色空間の将来の設定について心配する必要はありません:) – user3390652