.psファイルにepsファイルを描画する問題に苦労していますNSView
。ファイルから最初に eps ファイルをロードしdrawInRect:
、画像で描画すると、正しく表示されます。ただし、アーカイブ ファイルから読み込むと、画像は描画されません。
コピーして貼り付けて試すことができる、汚い小さな例を用意しました。新しい Cocoa アプリ プロジェクトを作成し、これをデリゲート メソッドに追加します。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Just a sample eps file
NSURL *url = [NSURL URLWithString: @"http://embedded.eecs.berkeley.edu/concurrency/latex/figure.eps"];
NSImage *epsImage = [[[NSImage alloc] initWithContentsOfURL: url] autorelease];
// Encode data
NSMutableData *mutableData = [[[NSMutableData alloc] init] autorelease];
NSKeyedArchiver *coder = [[[NSKeyedArchiver alloc] initForWritingWithMutableData: mutableData] autorelease];
[coder encodeObject: epsImage forKey: @"image"];
[coder finishEncoding];
NSString *dataFile = [@"~/Desktop/image.data" stringByExpandingTildeInPath];
[mutableData writeToFile: dataFile atomically: YES];
// Decode data
NSData *data = [NSData dataWithContentsOfFile: dataFile];
NSKeyedUnarchiver *decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData: data];
NSImage *loadedImage = [decoder decodeObjectForKey: @"image"];
// Draw image
NSRect rect;
rect.origin = NSZeroPoint;
rect.size = loadedImage.size;
NSView *view = [[NSApp mainWindow] contentView];
[view lockFocus];
[loadedImage drawInRect: rect fromRect: rect operation: NSCompositeSourceOver fraction: 1.0];
[view unlockFocus];
}
最初に読み込まれた画像が正しく描画されることを証明するには、行[loadedImage drawInRect:...]
を[epsImage drawInRect:...]
.
NSKeyedArchiver
ここではandNSKeyedUnarchiver
をシミュレートするためにencodeWithCoder:
andを使用していますinitWithCoder:
。そのため、(リソース フォークからの) プレビューを含まず、純粋に eps コマンドとして読み込まれる表現が正しく描画NSImage
されないという事実に注目してください。NSEPSImageRep
NSView
どんな助けでも大歓迎です。