Сохранение NSView в файл png? - PullRequest
6 голосов
/ 30 марта 2011

Я делаю простую программу, которая создает игровые карты для игры, в которую я играю.Я отправил его некоторым моим друзьям для тестирования, но они действительно хотят, чтобы он сохранял изображения, а не просто распечатывал их.Я пытался сохранить его как файл .png.У меня есть вопросы здесь.

  • Как я могу сохранить свое представление в виде файла .png, включая все NSImageWells представления.

  • Как я могу добавить NSPopupButton к NSSavePanel, чтобы позволить пользователям выбирать формат?

Любая помощь очень ценится.

Ответы [ 2 ]

12 голосов
/ 31 марта 2011

Сначала создайте представление TIFF вашего представления:

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

Для поддержки нескольких типов файлов используйте:

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

NSBitmapImageFileType - константа перечисления, определяющая тип файла для растровых изображений,Это может быть NSBMPFileType, NSGIFFileType, NSJPEGFileType, NSPNGFileType или NSTIFFFileType.

Если вам нужно настроить NSSavePanel, посмотрите на дополнительные представления: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/AppFileMgmt/Articles/ManagingAccessoryViews.html

4 голосов
/ 18 мая 2013
// 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];
 }];
...