将Retina NSBitmapImage调整为一半大小

时间:2014-08-07 13:36:27

标签: objective-c image macos cocoa

首先我要创建一个CGImageRef

CGImageRef imageRef = [self createCGimageOfDocumentInPath:scaledSelection withBackgroundColor:self.backgroundColor];

然后我正在创建NSBitmapImageRep

imageData = [[NSBitmapImageRep alloc] initWithCGImage:imageRef];

然后我正在制作Retina图像(144像素/英寸)

     NSSize newSize;
     newSize.width = [imageData pixelsWide] * 72.0 / 144;  // x-resolution
     newSize.height = [imageData pixelsHigh] * 72.0 / 144;  // y-resolution
     [imageData setSize:newSize];

在我的调试器中,它说 我的imageData->NSImageRep->_size = NSSize(320/240) pixelsWide = 640pixelsHigh = 480

看起来是正确的,我希望图像的大小为320/240,但我希望它是视网膜所以我希望像素加倍,对吗?

当我保存此图像并加载它时,它最终的高度/宽度为640 / 480--但也是144像素/英寸(视网膜)

所以我想我只需要一种方法在保存之前将我的图像调整为一半,或者我可能会以错误的方式进行此操作?以前有人做过这样的事吗?

1 个答案:

答案 0 :(得分:0)

事实证明,OSX记录了使用屏幕截图工具捕获的图像,然后告诉预览以半尺寸打开该图像。因此实际上不可能在预览中创建一个打开一半大小的图像,除非你在某处弄乱了OS文件。但这并不重要,因为如果您打开使用Chrome中的屏幕截图工具拍摄的图像或预览之外的其他应用程序,它也会以双倍大小打开。所以它似乎只是Apple为Preview + Built-in Screenshots创建的特殊外壳。

这当然是所有个人的推测,因为我实际上找不到任何文档或更多信息 - 但是,我可以告诉你,我创建了一个内置截图图像的精确复制品。包括与图像关联的所有元数据和属性,它在预览中仍然以不同方式打开。

我尝试更改NSBitmapImageRef,CGImage,CGContext中的任何相关属性,以尝试获取此属性。尝试更改NSEXIFProperties也无济于事。 (相关,无论你在元数据中改变什么,它都不会改变实际图像 - 结果证明它们只是标签。这是有道理的,因为我已经看到了带有.jpeg扩展名的GIF)

这是一篇有关缩放预览中打开的图像的人的文章,但这与我想做的相反

http://www.macissues.com/2014/03/29/adjust-retina-macbook-screenshots-to-be-actual-size/

无论如何,经过多次挖掘,我担心我现在必须将这个案子关闭。如果有人偶然发现并找到解决方案,请告诉我:))