2011-03-30 26 views
6

Estoy haciendo un programa simple que crea tarjetas de juego para un juego que juego. Lo envié a algunos de mis amigos para que lo prueben, pero realmente quieren que guarde las imágenes, no solo las impriman. He intentado guardarlo como un archivo .png. Tengo preguntas aquí.¿Guardar un NSView en un archivo png?

  • ¿Cómo puedo hacer que guardar mi punto de vista como un archivo .png, incluyendo todos NSImageWells de la vista.

  • ¿Cómo puedo agregar un NSPopupButton a un NSSavePanel para permitir a los usuarios seleccionar un formato?

Cualquier ayuda es muy apreciada.

Respuesta

12

En primer lugar crear una representación de la vista TIFF:

// Get the data into a bitmap. 
[self lockFocus]; 
rep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:[self bounds]]; 
[self unlockFocus]; 
data = [rep TIFFRepresentation]; 

para soportar múltiples tipos de archivos, uso:

data = [rep representationUsingType:(NSBitmapImageFileType)storageType 
properties:(NSDictionary *)properties]; 

NSBitmapImageFileType es una constante de enumeración que especifica un tipo de archivo para las imágenes de mapa de bits. Puede ser NSBMPFileType, NSGIFFileType, NSJPEGFileType, NSPNGFileType o NSTIFFFileType.

Si necesita personalizar el NSSavePanel, mira en vistas de accesorios: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/AppFileMgmt/Articles/ManagingAccessoryViews.html

+0

Funciona, pero ¿cómo puedo hacer que guardar el archivo? – Justin

+0

Editar: gritos, vuelva a leerlo. No me di cuenta de que ya has cubierto eso. Lo eliminaré en unos pocos. –

+2

- [NSData writeToFile: (NSString *) ruta atómica: indicador (BOOL)] será de interés. –

4
// Get the data into a bitmap. 
[viewBarChart lockFocus]; 
NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:[viewBarChart bounds]]; 
[viewBarChart unlockFocus]; 
NSData *exportedData = [rep representationUsingType:NSJPEGFileType properties:nil]; 

NSSavePanel *savepanel = [NSSavePanel savePanel]; 
savepanel.title = @"Save chart"; 

[savepanel setAllowedFileTypes:[NSArray arrayWithObject:@"jpg"]]; 

[savepanel beginSheetModalForWindow:self.view.window completionHandler:^(NSInteger result) 
{ 
    if (NSFileHandlingPanelOKButton == result) 
    { 
     NSURL* fileURL = [savepanel URL]; 

     if ([fileURL.pathExtension isEqualToString:@""]) 
      fileURL = [fileURL URLByAppendingPathExtension:@"jpg"]; 

     [exportedData writeToURL:fileURL atomically:YES]; 
    } 

    [rep release]; 
}]; 
Cuestiones relacionadas