2011-03-08 9 views
11

Soy totalmente nuevo en esto, pero aquí va: Quiero presionar un botón en mi aplicación y tener una visualización de imagen (planeo leerlo de una cámara, pero para comenzar con, abriré un archivo .TIF.) Sin embargo, dentro del constructor de interfaz, puedo crear botones dentro de un objeto NSObject, pero la literatura lo hace parecer que necesito hacer un objeto NSView para mostrar un archivo. El problema es que cuando hago esto, el objeto NSObject no parece hablar con el objeto NSView. Estoy tratando de hacer algo como:mostrando una imagen en cacao

NSString *inFilePath; 
    inFilePath = @"/Volumes/Data/Temp/Smiles.tiff"; 
    NSImage *TestImage = [[NSImage alloc] initWithContentsOfFile:inFilePath]; 
    [MyView setImage:TestImage]; 

Aquí, MyView es el objeto NSView. Recibo advertencias de que MyView puede no responder a setImage. He tratado de definir un IBOutlet dentro del objeto NSObject, y aunque puedo conectarlo dentro del constructor de interfaces, consola me da el error:

selector no reconocido enviado a la clase 0x1e080

Por lo tanto, no está claro cuál es el El próximo paso es ¿Hay una forma fácil de obtener dos objetos diferentes para "hablar" entre ellos? Gracias

Respuesta

15

Desea un objeto NSImageView. En la biblioteca de Interface Builder esto se llama Image Well, pero puede configurarlo para que no tenga un bisel.

NSImageView es una subclase de NSView que está optimizada para mostrar imágenes.

En el archivo de cabecera (.h), debe tener algo como esto:

@interface MyController : NSObject 
{ 
    //this declares an outlet so you can hook up the 
    //image view in Interface Builder 
    IBOutlet NSImageView* imageView; 
} 
@end 

Y en su aplicación (.m) Archivo:

@implementation MyController 

//called once the nib is loaded and all outlets are available 
- (void)awakeFromNib 
{ 
    NSString *inFilePath = @"/Volumes/Data/Temp/Smiles.tiff"; 
    NSImage *testImage = [[NSImage alloc] initWithContentsOfFile:inFilePath]; 
#if !__has_feature(objc_arc) 
    [testImage autorelease]; 
#endif 
    //imageView is your outlet 
    [imageView setImage:testImage]; 
} 

@end 

En Interface Builder usted debe enganchar hasta la salida imageView de su clase para que apunte al NSImageView que colocó en su vista.

+2

NSImageView no está * optimizado * para mostrar imágenes; los muestra. NSView no lo hace; un NSView, no subclasificado para dibujar nada, no extrae nada. Además, estás filtrando 'testImage'. –

+0

Gracias, solucioné la fuga, que fue causada por mí al copiar y pegar el código del OP sin verificarlo completamente. –

+0

Gracias - Tengo esta pieza funcionando. Ahora tengo que pasar al siguiente paso para mostrar la transmisión de video desde una cámara ... –