我对canvas元素反锯齿文本的方式有点困惑,我希望你们都能提供帮助.
在下面的屏幕截图中,顶部的"Quick Brown Fox"是一个H1元素,底部的是一个在其上呈现文本的canvas元素.在底部你可以看到两个"F"并排放置并放大.注意H1元素如何与背景更好地融合:

这是我用来渲染画布文本的代码:
var canvas = document.getElementById('canvas');
if (canvas.getContext){
var ctx = canvas.getContext('2d');
ctx.fillStyle = 'black';
ctx.font = '26px Arial';
ctx.fillText('Quick Brown Fox', 0, 26);
}
Run Code Online (Sandbox Code Playgroud)
是否可以以某种方式在画布上呈现文本,使其看起来与H1元素相同?为什么他们不同?
使用iPhone 4,Retina显示器的分辨率非常高,以至于大多数人无法区分像素(假设).如果是这种情况,那么支持Retina显示屏的应用程序是否仍然需要消除锯齿以使字体和图像平滑,或者这不再是必要的吗?
编辑:我对更详细的信息感兴趣.开始赏金.
通常,你会使用类似的东西:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);
glLineWidth(2.0f);
glVertexPointer(2, GL_FLOAT, 0, points);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_LINE_STRIP, 0, num_points);
glDisableClientState(GL_VERTEX_ARRAY);
Run Code Online (Sandbox Code Playgroud)
它在iPhone模拟器中看起来不错,但在iPhone上,线条变得非常薄,没有任何抗锯齿.
你如何在iPhone上获得AA?
继续与这个斗争变得非常沮丧.我不确定它是Xcode 4.4还是Mountain Lion(我同时安装了两个),但我的代码再一次在Xcode中被消除锯齿(字体平滑).
我之前能够通过以下说明解决此问题,这些说明来自此问题,但现在似乎都不起作用:
对于XCode 3.x,我会做以下事情:
defaults write com.apple.xcode AppleAntiAliasingThreshold 24.对于XCode 4,用户默认的域更改为com.apple.dt.Xcode.对于XCode 4
defaults write com.apple.dt.Xcode AppleAntiAliasingThreshold 24应该得到你想要的.
如何让Xcode恢复到可用状态?
xcode antialiasing font-smoothing xcode4.4 osx-mountain-lion
有没有办法从Windows版本的R中绘制抗锯齿图形?正如你从下面的两个版本中可以看到,Mac版的R打印图形抗锯齿....

....虽然Windows版本反锯齿文本,但它不会对实际图形进行反锯齿,如从提升点和网格中可以看到的:

这是代码的代码:
library(scatterplot3d)
attach(mtcars)
s3d <-scatterplot3d(wt,disp,mpg, pch=16, highlight.3d=TRUE,
type="h", main="3D Scatterplot")
fit <- lm(mpg ~ wt+disp)
s3d$plane3d(fit)
Run Code Online (Sandbox Code Playgroud)
我需要最高质量的网页发布.我正在运行Windows 7并从RBloomberg中提取数据,这只能在Windows下运行.
对于使用Core Animation图层支持视图的项目工作的任何人来说,遗憾的是,对于未在预先设置的不透明背景上呈现的文本,禁用了子像素抗锯齿(文本平滑).现在,对于能够为其文本设置不透明背景的人(通过setBackgroundColor:调用或Interface Builder中的等效设置),此问题不会出现太多问题.但对于其他人来说,绝对没有办法解决它,这不是一个人们无法忽视的事情.
我已经在网上寻找了两天以上的解决方案,并没有任何可用的东西出现.我想要做的就是创建一个在工作表窗口上设置的文本标签(不是用户可编辑的)(工作表窗口背景是透明的,因此将工作表的内容视图声明wantsLayer为true会禁用窗口上所有标签的文本平滑); 非常简单.我已经看到很多有争议的解决方案(快速谷歌搜索将在许多其他地方提出这个主题),但到目前为止,所有这些解决方案依赖于人们能够并愿意与不透明的背景妥协(你不能在一张纸上使用).
到目前为止,我可以想象的最佳方向是将文本预渲染到文本平滑到图像上,然后像往常一样在图层支持的视图上显示图像.但是,这似乎不可能.我认为可以尝试的"正常"方式是:
NSAttributedString *string = [[self cell] attributedStringValue];
NSImage *textImage = [[NSImage alloc] initWithSize:[string size]];
[textImage lockFocus];
[string drawAtPoint:NSZeroPoint];
[textImage unlockFocus];
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用(很可能是因为调用时drawRect:,图形上下文设置已禁用文本平滑 - 关闭子像素抗锯齿,而使用常规抗锯齿),但更多涉及的解决方案也没有找到这个问题(你在哪里创建自己的图形上下文).
那么如何做这样的事情呢?你能以某种方式"伪造"文本平滑的效果吗?是否有甚至黑客攻击的解决方案可以设置一些东西?我真的不想因为这个愚蠢的问题而放弃核心动画; 它有很多好处,可以节省大量的时间和代码.
编辑:经过大量搜索,我找到了一些东西.虽然线程本身只是重申了我的怀疑,但我想我可能已经找到了解决这个问题的方法:自定义CALayer绘图.Timothy Wood在他的一篇回复中附上了一个示例项目,该项目使用几种技术显示字体平滑,其中一些技术起作用.我会考虑将它集成到我的项目中.
编辑#2:结果,上面的链接也是一个半身像.尽管链接的方法提供了亚像素抗锯齿,但它们在透明背景上也会失败.
这是我画Bitmap上Canvas的我的Android应用:
canvas.save();
canvas.scale(scale, scale, x, y);
canvas.drawBitmap(bitmap, x, y, null);
canvas.restore();
Run Code Online (Sandbox Code Playgroud)
但是,Bitmap没有平滑缩放,不执行抗锯齿.如何启用抗锯齿功能?
是否有可能增加matplotlib中的抗锯齿效果?我仍然可以在我的数据中看到一些别名,我尝试了几个后端,它仍然存在.线路的抗锯齿标志已设置.
在这里你可以看到我的意思

这是一个取自截图的样本.这可能不是最好的例子,但我想可以看到线路上的楼梯.它是用wxagg后端拍摄的.
我在Windows 7中使用matplotlib版本1.01.
更新:我没有产生上一张图片的代码,但我仍然有问题.下面是一个显示别名的简单代码示例.
import numpy as np
import matplotlib
matplotlib.use('wxAgg')
import matplotlib.pyplot as pl
print 'Backend:', pl.get_backend()
x = np.linspace(0,6,100)
y = np.sin(x)
for a in range(10):
pl.plot( x, a/10.*x, linewidth=1)
pl.show()
Run Code Online (Sandbox Code Playgroud)
它打印出来的Backend: WXAgg
结果图如下所示.

特别是较低的红色曲线显示清晰的混叠.
我在WPF应用程序中使用Image控件时有一些256x256图像.虽然它们都是256x256,但我将一些控件更改为64x64等.当我将其调整大小时(使用fill作为我的拉伸属性),边缘变得非常粗糙.即使是像三角形这样简单的东西,也很明显:

有没有一个很好的解决方案,或者我需要在将它们放入应用程序之前调整photoshop中的图像大小?
我在IntelliJ IDEA中遇到了反锯齿文本的问题.那个东西由于某种原因附带了自己版本的OpenJDK 8.无论如何......子像素别名对于明亮的暗文本是可以接受的:
但对于明亮的黑暗文本,伽玛是错误的:
这意味着在这个方案中,文本看起来好像是粗体和水平模糊/模糊.
是否可以指定系统属性或破解系统,否则将AA插值的伽玛值更改为更暗的颜色?我已经选择了一个非常精细的字体(FicaCode Light),在这台计算机上没有显示较少粗体的字体(带有Gnome 3,19000x1080显示屏的Linux).
编辑:我真的在寻找一种控制AA伽玛的方法.我没有使用过IDEA 2017.1 EAP,但是发布版本已经附带了"固定"捆绑调整版本1.8.0_112,这在gist评论中提到过.如果我下载该版本,我会得到与上面两张图像完全相同的像素输出.这些是idea64.jvmoptions:
-Xms128m
-Xmx750m
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-Dawt.useSystemAAFontSettings=lcd
-Dsun.java2d.renderer=sun.java2d.marlin.MarlinRenderingEngine
-Djava2d.font.loadFontConf=false
Run Code Online (Sandbox Code Playgroud)
添加或删除最后一个属性只是使零差价,也改变从lcd到on或off具有零效果.
将这些图片与我通过Debian安装的常规OpenJDK 1.8.0_121进行比较:
很明显,这里的AA被破坏了(1:1它看起来完全是彩色的).所以我认为捆绑版本的子像素渲染基本上是正确的.只有在深色背景上使用错误的伽玛才能显示浅色文字.
编辑:经过更多的调查,问题归结为:我可以使用之间的自定义font.conf文件,和.对于轻微提示,字体在宽高比方面看起来平衡,但抗锯齿具有错误的伽玛,因此字体线条很粗(一切看起来都是粗体).对于中等或完全提示,字体看起来更细,更清晰,但现在宽高比被打破,字体太宽.hintstylehintslighthintmediumhintfull