2011-03-30 16 views
6

Oynadığım bir oyun için oyun kartları oluşturan basit bir program yapıyorum. Bunu test etmek için bazı arkadaşlarıma gönderdim, ama sadece görüntüleri yazdırmak değil, görüntüleri kaydetmek istiyorlar. Onu bir .png dosyası olarak kaydetmeyi denedim. Burada sorularım var.NSView bir png dosyasına kaydediliyor mu?

  • Görünümümün tüm görünümlerini NSImageWells dahil olmak üzere .png dosyası olarak nasıl kaydedebilirim?

  • Kullanıcıların bir biçim seçmek için izin vermek için bir NSSavePanel bir NSPopupButton ekleyebilir nasıl
  • ?

Her türlü yardım büyük beğeni topluyor.

cevap

12

Önce bir görüş TIFF gösterimini oluşturmak:

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

çoklu dosya türlerini desteklemek için kullanılmasını:

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

NSBitmapImageFileType bitmap görüntüler için bir dosya türünü belirten bir enum sabittir. NSBMPFileType, NSGIFFileType, NSJPEGFileType, NSPNGFileType veya NSTIFFFileType olabilir.

Eğer NSSavePanel özelleştirmek gerekirse, aksesuar görünümler içine bakmak: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/AppFileMgmt/Articles/ManagingAccessoryViews.html

+0

O inşaat, ama dosyayı kaydetmek nasıl yapabilirim? – Justin

+0

Düzenleme: whoops, yeniden oku. Bunu zaten biliyorsun farkında değildin. Bir kaç içinde kaldıracaktır. –

+2

- [NSData writeToFile: (NSString *) yolu atomik olarak: (BOOL) bayrağı] ilgilenir. –

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]; 
}]; 
İlgili konular