我使用CGImage的API( CGImageDestination,
CGBitmapContext,
,CGImage
在Mac OS X等)以及iOS的压缩图像为JPEG.使用该kCGImageDestinationLossyCompressionQuality
属性,您可以控制压缩质量:0.0
最大压缩和1.0
最高质量(如果可能,根据Apple,无损).
我发现当你去的时候,磁盘大小和图像质量都有很大的0.99
提升1.0.
.例如,我有一个2048x1368的图像,当质量设置为压缩到430 KB 0.99
但是当质量达到2.3 MB时设置为1.0.视觉质量也有很大的提升,并且0.99
这个特定图像的设置是不可接受的.尝试设置质量之间的任何东西0.99
来1.0
作为规模保持在430 KB,直到不起作用0.995
的地方跳起来2.3 MB.另外,是不是真的有素质相差无几0.90
,以0.99
在视觉质量有较大提升其范围的文件大小从353〜KB至430 KB,但不是.
有谁知道是否有任何方法可以提高JPEG质量?我真的需要的东西比0.99
给予我的东西更好但却少于1.0
提供给我的东西.也许我可以使用其他一些API?
我可能会尝试直接使用libjpeg,但我希望它不会出现这种情况.
经过一些调查后发现,对于所有kCGImageDestinationLossyCompressionQuality
设置,1.0
Apple使用4:2:0 色度子采样(或色度抽取).这意味着对于YCrCb图像,它们仅针对每4个亮度(Y)像素采样一个色度像素(CrCb).换句话说,他们只使用原始图像中1/4的色度数据.对于1.0
Apple 的质量使用4:4:4色度子采样,这对于每个亮度像素都不是色度子采样或一个色度像素.这就是文件大小爆炸的原因,因为图像包含4x颜色数据与质量<= 0.99
.
那么,有没有人知道是否有办法使用CGImage(或任何其他API)关闭色度子采样的质量低于1.0
?
在Xcode中将文件提交到SCM时,它会使用比较视图显示其版本编辑器(显示每个文件的差异).如果单击文件之间的装订线,则可以使用向上和向下箭头键在更改之间快速导航.但是,您无法使用键盘轻松移动到下一个文件(据我所知).必须使用鼠标单击每个文件,然后单击装订线,使用键盘在更改之间移动,然后单击下一个文件,这非常繁琐.
有没有人知道只使用键盘在这个视图中的文件之间导航的方法?
我做了一些搜索并查看了Xcode的Key Bindings首选项,但我找不到任何东西.
使用以下内容创建Core Image CIContext时:
contextWithCGLContext:pixelFormat:colorSpace:options:
Run Code Online (Sandbox Code Playgroud)
您可以使用a指定颜色空间CGColorSpaceRef
.但是,options
您可以传递的字典还允许您设置某些颜色空间参数.来自Apple的文档:
kCIContextOutputColorSpace
在将图像渲染到上下文之前用于图像的颜色空间的键.默认情况下,Core Image使用GenericRGB颜色空间,该颜色空间与系统保持颜色匹配.您可以通过提供Quartz 2D CGColorSpace对象(CGColorSpaceRef)来指定不同的输出颜色空间.(有关创建和使用CGColorSpace对象的信息,请参阅"Quartz 2D编程指南".)
kCIContextWorkingColorSpace
用于图像操作的颜色空间的键.默认情况下,Core Image假定处理节点是128位/像素,线性光,使用GenericRGB色彩空间的预乘RGBA浮点值.您可以通过提供Quartz 2D CGColorSpace对象(CGColorSpaceRef)来指定不同的工作色彩空间.请注意,工作色彩空间必须基于RGB.如果您有YUV数据作为输入(或其他非基于RGB的数据),您可以使用ColorSync函数转换为工作色彩空间.(有关创建和使用CGColorSpace对象的信息,请参阅"Quartz 2D编程指南".)
我的问题是,这些不同的色彩空间参数如何相互作用?
我的假设是,与使用所设置的色彩空间创建CIContext colorspace:
以上参数是一样的设置使用的色彩空间kCIContextOutputColorSpace
的options:
字典.那是对的吗?如果没有,每个参数意味着什么?
如果是这样,那么如果使用colorspace:
参数和字典中的kCIContextOutputColorSpace
键设置颜色空间会发生什么options:
?有人会覆盖另一个吗?还有其他一些行为吗?
我正在寻找协议中的Cocoa – windowDidChangeBackingProperties:
通知的Windows API,NSWindowDelegate
当窗口的颜色空间发生变化时(当它被移动到另一个监视器或用户更改监视器配置文件时).
有谁知道Windows上的等效API是什么?
我正在开发一个完全色彩管理的应用程序.因此,我需要在更改显示器的颜色配置文件或将应用程序窗口移动到其他屏幕时收到通知.在Mac方面,这很简单,我只是– windowDidChangeBackingProperties:
为我的窗口委托实现该方法,每当用户将窗口拖动到另一个监视器或每次更改全局监视器配置文件时,我都会收到通知.简单易用.在Windows方面,我不知道如何获得这些通知.
目前,当应用程序启动时,我将使用GetICMProfile()
WCS(Windows Color System)功能获取监视器配置文件.我需要一些关于监视器配置文件更改的通知.
如何在Windows上接收监视器配置文件更改通知?
应用程序窗口从一个监视器移动到另一个监视器时的通知的加值点.我希望有一个通知,但如果没有,我可以通过监视窗口移动来解决它.
我一直在讨伐最近,以消除我们的代码的警告,并更加熟悉GCC警告标志(如-Wall
,-Wno-<warning to disable>
,-fdiagnostics-show-option
,等).但是我无法弄清楚如何禁用(甚至控制)链接器警告.我得到的最常见的链接器警告形式如下:
ld: warning: <some symbol> has different visibility (default) in
<path/to/library.a> and (hidden) in <path/to/my/class.o>
Run Code Online (Sandbox Code Playgroud)
我得到这个的原因是因为我使用的库是使用default
可见性构建的,而我的应用程序是使用hidden
可见性构建的.我通过hidden
可见性重建库来解决这个问题.
我的问题是:如果我愿意,我该如何压制这个警告?这不是我现在需要做的事情,我已经弄清楚如何解决它但我仍然很好奇你是如何压制那个特别的警告 - 或者一般的链接器警告?
使用-fdiagnostics-show-option
for for C/C++/linker标志并没有说明警告的来源与其他编译器警告一样.