Mac Dev - 图像I / O.

时间:2012-10-27 10:26:43

标签: objective-c xcode

我的第一个问题。

我正在尝试创建一个简单的应用程序,它从一个位置接收图片,并将其放置在桌面上。我遇到的问题是这个错误:

2012-10-27 10:49:16.405 saveFile[3271:303] +[__NSCFConstantString scheme]: unrecognized selector sent to class 0x7fff73c01e38
    2012-10-27 10:49:16.406 saveFile[3271:303] +[__NSCFConstantString scheme]: unrecognized selector sent to class 0x7fff73c01e38

在这一行:

CGImageRef imageItself =  CGImageSourceCreateImageAtIndex(myImageSource, 0, NULL);

这是实际的代码:

标题文件:

#import <Cocoa/Cocoa.h>

//NSOpenPanel = use finder
NSOpenPanel *openPanel;
//URL is the directory
NSURL*  theDoc;


//Don't allow bottom button to malfunction by being clicked early.
bool topButtonClicked = NO;

@interface saveFileAppDelegate : NSObject <NSApplicationDelegate>

- (IBAction)moveFile:(id)sender;
- (IBAction)chooseFile:(id)sender;



@property (nonatomic, retain) IBOutlet NSTextField *label;
@property (assign) IBOutlet NSWindow *window;

@end

.m文件:

#import "saveFileAppDelegate.h"

@implementation saveFileAppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
}



- (IBAction)chooseFile:(id)sender {
    openPanel = [NSOpenPanel openPanel];
    [openPanel beginWithCompletionHandler:^(NSInteger result){
        if (result == NSFileHandlingPanelOKButton) {
            theDoc = [[openPanel URLs] objectAtIndex:0];
            [_label setStringValue:[NSString stringWithFormat:@"%@",theDoc]];
            // Open  the document.
            topButtonClicked = YES;
        }

    }
    ];
}

- (IBAction)moveFile:(id)sender {

    if (topButtonClicked == YES) {

        //Take in picture

        CGImageSourceRef myImageSource = CGImageSourceCreateWithURL((__bridge CFURLRef)(theDoc), NULL);

        //CGImageRef myImage = CGImageSourceCreateImageAtIndex(myImageSource,0,NULL);


        //Save picture to desktop

        //Save where I wish to save the file
        CFURLRef desktopURL = (CFURLRef)@"/Users/Ken/Desktop/";

        //Save where I want to save, the type of file I expect to save, number of images to save, any additional options.
        CGImageDestinationRef whereToSave = CGImageDestinationCreateWithURL(desktopURL, kUTTypeJPEG, 1, NULL);

        //Create a reference to the image itself, take in the image read, which image (only one, so 0), and additional options.
        CGImageRef imageItself =  CGImageSourceCreateImageAtIndex(myImageSource, 0, NULL);

        //Begin final preperations, pull altogether desktop URL, the image read in before, and additional options.
        CGImageDestinationAddImage (whereToSave, imageItself, NULL);

        //Finalize (write the file)
        CGImageDestinationFinalize(whereToSave);

        //CGImageDestinationRef saveImageToDesktop (CFURLRef desktop, CFStringRef jpeg, size_t count, CFDictionaryRef NULL);

    }
    else{


        /* open an alert with an OK button */
        NSAlert *alert = [[NSAlert alloc] init];
        [alert setMessageText:@"Stop it."];
        [alert runModal];
    }
}


void CGImageDestinationAddImage (CGImageDestinationRef idst, CGImageRef image, CFDictionaryRef properties);

@end

1 个答案:

答案 0 :(得分:2)

OP在这里。

我设法解决了这个问题。我让它更抽象,并尽可能地延长了每一种方法,所以我可以一步一步地看到它。我以为我会为那些偶然发现我问题的人发布我的修正案。

以下是.m:

中移动文件部分的结束代码
- (IBAction)moveFile:(id)sender {

    if (topButtonClicked == YES) {

        //Take in picture

        CFURLRef CFURLReftheDoc = (__bridge CFURLRef)theDoc;

        CGImageSourceRef myImageSource = CGImageSourceCreateWithURL(CFURLReftheDoc, NULL);

        //Create a reference to the image itself, take in the image read, which image (only one, so 0), and additional options.
        CGImageRef imageItself =  CGImageSourceCreateImageAtIndex(myImageSource, 0, NULL);

        //Save picture to desktop

        //Store desktop directory.
        NSString *path = [@"~/Desktop/public.png" stringByExpandingTildeInPath];

        NSURL *NSURLdesktopURL = [[NSURL alloc] initFileURLWithPath:path];

        NSLog(@"%@",NSURLdesktopURL);

        //store where I want to save, the type of file I expect to save, number of images to save, any additional options.
        CGImageDestinationRef whereToSave = CGImageDestinationCreateWithURL((__bridge CFURLRef)NSURLdesktopURL, kUTTypeJPEG, 1, NULL);

               // NSLog(@"%@",whereToSave);

        //Begin final preperations, pull altogether desktop URL, the image read in before, and additional options.
        CGImageDestinationAddImage (whereToSave, imageItself, NULL);

        //Finalize (write the file)
        CGImageDestinationFinalize(whereToSave);

        //CGImageDestinationRef saveImageToDesktop (CFURLRef desktop, CFStringRef jpeg, size_t count, CFDictionaryRef NULL);

    }
    else{


        /* open an alert with an OK button */
        NSAlert *alert = [[NSAlert alloc] init];
        [alert setMessageText:@"Stop it."];
        [alert runModal];
    }
}
@end