macOS-NSView复制与原始大小相同的图像文件

时间:2018-07-11 22:36:35

标签: swift macos nsimage

我试图了解如何处理图像,以便对依赖于此的事物进行进一步的构想。 由于出现了意外的结果(对我来说很明显),我只是在尝试通过一个基本示例了解NSImagedraw(in:from:operation:fraction:)方法的工作方式:仅创建jpg文件的副本。

假设我有一张尺寸为2000 * 1000(像素)的jpg照片(在取景器中看到了此图片)

我在操场上有以下代码:

let originalSize = originalImage.size //2000 * 1000
let imageCopy = NSImage(size: originalSize)
let destRect = CGRect(origin: .zero, size: originalSize)

imageCopy.lockFocus()
originalImage.draw(in: destRect, from: .zero, operation: .copy, fraction: 1)
imageCopy.unlockFocus()

imageCopy // I get an image that is 4000 * 2000... 

imageCopy.jpgWrite(to: newImagePath) // doesn't really matter the implementation, but looking at the file in finder the size matches this (twice bigger).

(size / 2)是一个辅助方法,可以将宽度和高度都乘以2。

例如,如果我尝试:

let originalSize = originalImage.size / 2 //1000 * 500
let imageCopy = NSImage(size: originalSize)
let destRect = CGRect(origin: .zero, size: originalSize)

imageCopy.lockFocus()
originalImage.draw(in: destRect, from: .zero, operation: .copy, fraction: 1)
imageCopy.unlockFocus()

imageCopy // I get an image that is 2000 * 1000... ok....

imageCopy.jpgWrite(to: newImagePath)

我有适当的尺寸,但是渲染的图像是原始图像的四分之一(一半宽度和一半高度)。

我真的想精确控制输出图像的大小,因为我依赖于此。我不知道我尝试了多少方法,总是得到意想不到的结果。

注意:我知道可能还有其他方法可以处理这种特定情况,例如复制文件本身,但这只是我进一步进入实际需要的一种方式。

谢谢

0 个答案:

没有答案