2011-11-09 6 views
1

私のアプリケーションは(ペーストボードからの)NSImageオブジェクトからカスタムオブジェクトを作成しようとしていますが、現在のプロセスでは画像URLのみが取り込まれます。NSImage→NSURL→カスタムオブジェクト

私は(それが1缶initialize an NSImage from a URL以来の合理的な期待のように思える)NSImageではのURLを取得する方法があった場合、私は思っていたので、この時点での大きな変更を避けるために

感謝したいと思います。

EDIT(答)

私はわずかに異なるルートを行ってきました。ペーストボードの内容をNSImageの配列として取得するのではなく、単純にNSURLの配列として取得します。私はそれらを私のプロセスに供給することができます。 BlazingFrogによって

NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; 
    NSArray *classArray = [NSArray arrayWithObject:[NSURL class]]; 
    NSDictionary *options = [NSDictionary dictionary]; 

    BOOL ok = [pasteboard canReadObjectForClasses:classArray options:options]; 
    if (ok) { 
     NSArray *URLs = [pasteboard readObjectsForClasses:classArray options:options]; 
    } 
+1

+1セクシーなUnicodeの矢印! –

答えて

1

引用:

(1はURLからNSImageではを初期化することができるので、それは合理的期待のように思える)

私が使用してNSStringを初期化するとしましょう:

NSString * theString = [NSString initWithContentsOfURL: encoding: error: ]; 

私はそれを取得することはできません元のNSURLNSStringです。
また、同じことがNSImageに当てはまると確信しています。 (実際、完全に確信しています)

実際NSImageinitWithContentsOfURL:で初期化できます。
initWithData:またはinitWithPasteboard:で初期化することもできます。
NSURLは、NSImageを初期化するための厳密な要件ではありません。
つまり、URLを使用せずにNSImageを初期化することができます。
NSImageは単にイメージ表現のコンテナです。アップルによる

Quote

NSImageではオブジェクトは、画像表現のグループを管理します。 NSImageを受け入れるようにあなたが 'プロセス'

ソリューション

  1. 変更。
  2. NSImageを一時ファイルに書き込み、そのファイルパスを使用します。
1

画像が標準のペーストボード(コピー/ペースト機構)を介して配信されている場合、画像がない場合があるため、URLで参照する方法はありません。たとえば、WordまたはPagesでドキュメントを開き、イメージを選択してコピーすると、そのイメージへのURL参照を作成することはできません。これはペーストボード上にありますが、アクセス可能な形式のファイルシステムにはありません。

NSImageオブジェクトを直接処理するようにコードを修正する必要があると思います。