cocoa nsimage无法保存

时间:2013-01-08 21:50:50

标签: cocoa variables nsimage

我是可可和编程的新手,对不起,如果这是基本的东西。

我正在使用ARC。我有一个NSImageView组件,由DropZone类控制。我拖累将图像放入其中,但是一旦我尝试调用我得到的scalling方法,它告诉我“:ImageIO:CGImageSourceCreateWithData数据参数为nil”我假设我做错了什么,只是不知道还有什么

这是我在DropZone.m中的方法

- (void)scaleIcons:(NSString *)outputPath{
NSImage *anImage;
NSSize imageSize;
NSString *finalPath;

anImage = [[NSImage alloc]init];
anImage = image;
imageSize = [anImage size];
imageSize.width = 512;
imageSize.height = 512;
[anImage setSize:imageSize];

finalPath = [outputPath stringByAppendingString:@"/icon_512x512.png"];

NSData *imageData = [anImage TIFFRepresentation];
NSBitmapImageRep *rep = [NSBitmapImageRep imageRepWithData:imageData];
NSData *dataToWrite = [rep representationUsingType:NSPNGFileType properties:nil];
[dataToWrite writeToFile:finalPath atomically:NO];
}

DropZone.h

@interface DropZone : NSImageView <NSDraggingDestination>{
  NSImage *image;
}
- (void)scaleIcons:(NSString *)outputPath;
@end

以下是我称之为AppDelegate.m

的方式
- (IBAction)createIconButtonClicked:(id)sender {
NSFileManager *filemgr;
NSString *tempDir;

filemgr = [NSFileManager defaultManager];
tempDir = [pathString stringByAppendingString:@"/icon.iconset"];
NSURL *newDir = [NSURL fileURLWithPath:tempDir];
[filemgr createDirectoryAtURL: newDir withIntermediateDirectories:YES attributes: nil error:nil];
DropZone *myZone = [[DropZone alloc] init];
[myZone scaleIcons:tempDir];

NSAlert *alert = [[NSAlert alloc] init];
[alert setMessageText:@"Done!"];
[alert runModal];
}

图像从pastebaord中拉出来:

- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender{
if ([NSImage canInitWithPasteboard:[sender draggingPasteboard]]) {
    image = [[NSImage alloc]initWithPasteboard:[sender draggingPasteboard]];
    [self setImage:image];
    [self setImageAlignment: NSImageAlignCenter];
    }
return YES;
}

出于某种原因,我的“形象”迷失了。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

问题是您在app委托中创建了一个新的DropZone实例,但我假设您在IB中创建了图像视图并将其类更改为DropZone。那是对的吗?如果是这样,您需要在应用委托中将IBOutlet连接到IB中的图像视图,并且具有以下内容:

    [self.iv scaleIcons:tempDir];

其中iv是我的IBOutlet。

答案 1 :(得分:0)

如果不知道“图像”的来源,我会说你的问题就在这些方面......

anImage = [[NSImage alloc]init];
anImage = image;

你应该从imageView ...

中抓取图片
anImage = [myImageView image];