Сохранение NSView в png-файл?
Я делаю простую программу, которая создает игровые карты для игры, в которую я играю. Я отправил его своим друзьям для тестирования, но они действительно хотят сохранить изображения, а не просто распечатать их. Я попытался сделать его save as a .PNG-файл. У меня есть вопросы.
Как я могу сделать это сохранить как .png-файл, включая все NSImageWells представления.
Как добавить NSPopupButton в NSSavePanel, чтобы разрешить пользователям выбрать формат?
любая помощь очень ценится.
2 ответов
сначала создайте представление 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
// 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];
}];