gpt4 book ai didi

cocoa - 打印 NSImage

转载 作者:行者123 更新时间:2023-12-03 17:18:05 37 4
gpt4 key购买 nike

由于 Cocoa-Java 已弃用,我正在将 Cocoa-Java 代码迁移到 Cocoa + JNI。该代码打印存储在文件中的图像。新的 Cocoa 代码基本上是:

NSImage *image = [[NSImage alloc] initWithContentsOfFile:spoolFile];
if ( [image isValid] ) {
NSImageView *view = [[NSImageView alloc] init];
[view setImage:image];
[view setImageScaling:NSScaleProportionally];

NSPoint p;
NSSize s;

p.x = static_cast<float>( boundsX );
p.y = static_cast<float>( boundsY );
[view setBoundsOrigin:p];

s.width = static_cast<float>( boundsWidth );
s.height = static_cast<float>( boundsHeight );
[view setBoundsSize:s];

NSPrintInfo *info = [NSPrintInfo sharedPrintInfo];
[info setHorizontalPagination:NSClipPagination];
[info setVerticalPagination:NSClipPagination];
[info setHorizontallyCentered:NO];
[info setVerticallyCentered:NO];

p.x = static_cast<float>( boundsX );
p.y = static_cast<float>( [info paperSize].height - boundsHeight - boundsY );
[view translateOriginToPoint:p];

NSPrintOperation *printOp =
[NSPrintOperation printOperationWithView:view printInfo:info];
[printOp setShowsPrintPanel:NO];
[printOp runOperation];
}

运行此代码最终会崩溃:

Thread 0 Crashed:
0 com.apple.AppKit 0x9484ac75 -[NSConcretePrintOperation(NSInternal) _tryToSetCurrentPageNumber:] + 345
1 com.apple.AppKit 0x948d88cf -[NSView(NSPrintingInternal) _printForCurrentOperation] + 524
2 com.apple.AppKit 0x948d85c5 -[NSConcretePrintOperation _renderView] + 358
3 com.apple.AppKit 0x9491f0c0 -[NSConcretePrintOperation runOperation] + 362
为什么?如何简单地打印存储在文件中的图像?

最佳答案

NSImageView *view = [[NSImageView alloc] init];

这是无效的。您需要使用initWithFrame:来初始化 View 。您可能需要传递一个由 NSZeroPoint 和图像大小组成的框架。

至于 setBoundsOrigin:setBoundsSize: 的使用:我不确定这些是否有效,假设您打算裁剪图像。您可以尝试它们(解决上述问题后),但我觉得从旧图像的所需部分创建新图像更安全。您可以通过创建所需大小的空图像,锁定焦点,在新图像的原点绘制旧图像的正确部分,解锁新图像的焦点,然后给出新图像而不是新图像来完成此操作。旧的到 ImageView 。

关于cocoa - 打印 NSImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1434175/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com