android 抗锯齿方法[转]

在Android中,目前,我知道有两种出现锯齿的情况。

① 当我们用Canvas绘制位图的时候,如果对位图进行了选择,则位图会出现锯齿。

② 在用View的RotateAnimation做动画时候,如果View当中包含有大量的图形,也会出现锯齿。我们分别以这两种情况加以考虑。

◆ 用Canvas绘制位的的情况。在用Canvas绘制位图时,一般地,我们使用drawBitmap函数家族,在这些函数中,都有一个Paint参数,要 做到防止锯齿,我们就要使用到这个参数。如下:首先在你的构造函数中,需要创建一个Paint。 Paint mPaint = new Paint(); 然后,您需要设置两个参数:

1)mPaint.setAntiAlias();

2)mPaint.setBitmapFilter(true)。

第一个函数是用来防止边缘的锯齿,第二个函数是用来对位图进行滤波处理。最后,在画图的 时候,调用drawBitmap函数,只需要将整个Paint传入即可。

◆ 有时候,当你做RotateAnimation时,你会发现,讨厌的锯齿又出现了。这个时候,由于你不能控制位图的绘制,只能用其他方法来实现防止锯齿。 另外,如果你画的位图很多。不想每个位图的绘制都传入一个Paint。还有的时候,你不可能控制每个窗口的绘制的时候,您就需要用下面的方法来处理——对 整个Canvas进行处理。

1)在您的构造函数中,创建一个Paint滤波器。 PaintFlagsDrawFilter mSetfil = new PaintFlagsDrawFilter(0, Paint.FILTER_BITMAP_FLAG);第一个参数是你要清除的标志位,第二个参数是你要设置的标志位。此处设置为对位图进行滤波。

2)当你在画图的时候,如果是View则在onDraw当中,如果是ViewGroup则在dispatchDraw中调用如下函数。 canvas.setDrawFilter( mSetfil ); ★ 最后,另外,在Drawable类及其子类中,也有函数setFilterBitmap可以用来对Bitmap进行滤波处理,这样,当你选择 Drawable时,会有抗锯齿的效果。

时间: 2024-09-30 14:58:48

android 抗锯齿方法[转]的相关文章

基于图片的抗锯齿方法(一)

目前为止,MSAA仍是抗锯齿效果的黄金标准.然而MSAA需要硬件支持,并且要在RT中存放子像素信息,这大大增加了内存和带宽开销.在使用HDR管线或者G Buffer时此问题显得更加严重. 由于这些限制,基于后处理的抗锯齿方案逐渐成为主流.这类方案并不需要改变渲染管线,而是在图片中寻找被人眼识别为锯齿的像素,再对应模糊处理.morphological antialiasing(MLAA)即是其中之一. MLAA的思路很简单,考虑锯齿图中的一个微元,它常常是下图中B的样子.而如果分辨率无限加大,可以

UE4在PSVR中的抗锯齿和优化相关知识

UE4目前版本(4.15)在PS平台上并不支持MSAA,在未来的版本会加入.也就是说目前没有办法在PS平台上使用Forward Rendering + MSAA的组合 FXAA效率最高,但效果最差,只做了最后的图像边缘锐化 MSAA的优点是物体边缘和贴图分开处理,边缘会比较清晰.缺点是开销会比TAA稍大(即使有硬件支持),另外会有Specular aliasing.在使用MSAA时,可以在材质中打开normal to roughness,这样会使normal上突出的部分更加粗糙,减少高光闪烁.

cocos2dx 抗锯齿

这个不是经常用到,但偶尔又需要,记录一下. 缩小抗锯齿:(要求是pot图片,即2的n次方的宽高的图片) CCTexture2D* pTexture = sprite:getTexture(); pTexture->generateMipmap(); ccTexParams texParams = {GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR, GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE}; pTexture->setTexParameters

【ShaderToy】基础篇之再谈抗锯齿(antialiasing,AA)

写在前面 在之前的基础篇中,我们讲到了在绘制点线时如何处理边缘的锯齿,也就是使用smoothstep函数.而模糊参数是一些定值,或者是跟屏幕分辨率相关的数值,例如分辨率宽度的5%等等.但这种方法其实是有一种问题的.这需要我们从绘制的图像说起. ShaderToy中绘制的很多图像可以说是一种Procedure Texture,过程纹理,即是计算机生成的纹理.拿之前画的圆和线来说,这些圆和线的绘制过程,是我们计算每个fragment到"期望图像"的距离,然后根据距离来判断使用哪种颜色.如果

Unity3d 超级采样抗锯齿 Super Sampling Anti-Aliasing

Super Sampling Anti-Aliasing SSAA算是在众多抗锯齿算法中比较昂贵的一种了,年代也比较久远,但是方法比较简单, 主要概括为两步 1.    查找边缘 2.    模糊边缘 这是一种post processing的处理方法, 接下来我们就看看怎么实现 查找边缘 查找边缘的原因也是因为减少消耗,这样就可以只在边缘处进行超级采样,不必为全图进行采样了. 之前的文章详细说过三种查找边缘的方法Roberts,Sobel,Canny ,其中sobel最优,所以我们就是用sobe

Android画图之抗锯齿

在画图的时候,图片如果旋转或缩放之后,总是会出现那些华丽的锯齿.其实Android自带了解决方式.    方法一:给Paint加上抗锯齿标志.然后将Paint对象作为参数传给canvas的绘制方法. Java代码   paint.setAntiAlias(true); 方法二:给Canvas加上抗锯齿标志.有些地方不能用paint的,就直接给canvas加抗锯齿,更方便. Java代码   canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Pain

(转)Android中实现区域平均算法在图片缩放里的应用(缩放图片抗锯齿)

摘要:Android图片缩放效果较差,尤其是将大尺寸的图片缩放成小尺寸的图片时,即便是加了抗锯齿,锯齿现象也比较严重:而java sdk里的区域平均算法缩放图片,效果就比较完美了,因为jdk不能直接用于安卓项目中(类冲突),也没找到可以使用的替代的library,最终只好自己写,在此分享! 正文: 目前我知道的Android API中的传统的图片抗锯齿优化处理无非就是以下相关的设置: //缩放抗锯齿Bitmap.createScaledBitmap(bitmap, width, height,

图片变形的抗锯齿处理方法

本文转载至http://adad184.com/2015/08/31/image-rotate-with-antialiasing/ 周末在微博上看到@周楷雯Kevin说起CALayer抗锯齿的问题 具体做法是: 1 layer.allowsEdgeAntialiasing = true 想起了很久以前也遇到过类似的问题 那时候要做一个类贴纸的应用 理所当然会遇到贴纸缩放和旋转的问题 所以锯齿的问题也是需要解决的 但是那时候是iOS4,5的时代 压根没有上面说的allowsEdgeAntiali

android 图片缩放抗锯齿

之前用的时候只设置了antialias属性,其实要设置两个flag才行 1 paint.setFlags(Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG); 2 //或者 3 canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG)); android 图片缩放抗锯齿