2012-06-27 25 views
12

Tôi có một nút PopUp có chứa danh sách màu. Ở phía trước của tiêu đề màu, tôi cần hiển thị một hộp nhỏ cùng màu (_maybe một hình ảnh có cùng màu _). Vì vậy, tôi đã nghĩ đến việc tiếp cận này, rằng nếu tôi có thể tạo ra một đối tượng NSImage sử dụng NSColor đối tượng (mà sẽ thể đã có mặt), sau đó tôi có thể sử dụng

-(void) setImage:(NSImage *) menuImage

phương pháp NSMenuItem lớp để hiển thị các hình ảnh trong mặt trước của tiêu đề màu trong nút bật lên.

Vì vậy, Làm thế nào tôi có thể hoàn thành việc tạo một đối tượng NSImage bằng cách sử dụng NSColor?
Bất kỳ cách tiếp cận nào khác để giải quyết vấn đề cũng được hoan nghênh. :)Tạo NSImage từ NSColor

+0

này nên được những gì bạn đang tìm kiếm: [http://stackoverflow.com/questions/ 990.976/how-to-tạo-một-màu-1x1-UIImage-on-the-iphone-động] [1] [1]: http://stackoverflow.com/questions/990976/how -to-tạo-a-màu-1x1-uiimage-on-the-iphone-dy tên là –

Trả lời

15

Một phương pháp loại đơn giản sẽ làm điều này

@interface NSImage (ImageAdditions) 

+(NSImage *)swatchWithColor:(NSColor *)color size:(NSSize)size; 


@end 

@implementation NSImage (ImageAdditions) 

+(NSImage *)swatchWithColor:(NSColor *)color size:(NSSize)size 
{ 
    NSImage *image = [[[NSImage alloc] initWithSize:size] autorelease]; 
    [image lockFocus]; 
    [color drawSwatchInRect:NSMakeRect(0, 0, size.width, size.height)]; 
    [image unlockFocus]; 
    return image;  
} 

@end 

[EDIT] remove phản API

+0

Cảm ơn rất nhiều @ Warren. – rsharma

+0

'- setScalesWhenResized:' is ** deprecated **. * Phương pháp này có liên quan đến hành vi bộ nhớ đệm. Trong Mac OS X v10.6 và bộ nhớ đệm hình ảnh sau này không còn cần thiết và kết quả là không cần thay thế. * –

+0

Không nhận ra. Điều này được cắt/dán từ một số mã cũ. Thx –

5

Và các biến thể mở rộng nhanh chóng của trên:

import Cocoa 

extension NSImage { 
    class func swatchWithColor(color: NSColor, size: NSSize) -> NSImage { 
    let image = NSImage(size: size) 
    image.lockFocus() 
    color.drawSwatchInRect(NSMakeRect(0, 0, size.width, size.height)) 
    image.unlockFocus() 
    return image 
    } 
} 
2

Dưới đây là một Swift 3 phiên bản khởi tạo tiện lợi của các câu trả lời trước:

extension NSImage { 
    convenience init(color: NSColor, size: NSSize) { 
     self.init(size: size) 
     lockFocus() 
     color.drawSwatch(in: NSRect(origin: .zero, size: size)) 
     unlockFocus() 
    } 
} 

dụ Cách sử dụng:

let redSwatchImage = NSImage(color: .red, size: NSSize(width: 128, height: 128)) 

Hãy thoải mái để thay đổi ngữ nghĩa khi cần thiết :)

Các vấn đề liên quan