当前位置: 首页 > 编程笔记 >

Android编程画图之抗锯齿解决方法

尉迟明辉
2023-03-14
本文向大家介绍Android编程画图之抗锯齿解决方法,包括了Android编程画图之抗锯齿解决方法的使用技巧和注意事项,需要的朋友参考一下

本文实例分析了Android编程画图之抗锯齿解决方法。分享给大家供大家参考,具体如下:

在画图的时候,图片如果旋转或缩放之后,总是会出现那些华丽的锯齿。其实Android自带了解决方式。

方法一:给Paint加上抗锯齿标志。然后将Paint对象作为html" target="_blank">参数传给canvas的绘制方法。

paint.setAntiAlias(true);

方法二:给Canvas加上抗锯齿标志。

有些地方不能用paint的,就直接给canvas加抗锯齿,更方便。

canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));

测试代码如下:

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
import android.view.View;
public class MyView extends View {
  private PaintFlagsDrawFilter pfd;
  private Paint mPaint = new Paint();
  private Matrix matrix = new Matrix();;
  private Bitmap bmp;
  public MyView(Context context) {
    super(context);
    initialize();
  }
  private void initialize() {
    pfd = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
    mPaint.setAntiAlias(true);
    matrix.setRotate(30);
    matrix.postScale(0.5f, 0.5f);
    bmp = BitmapFactory.decodeResource(getResources(), R.drawable.show);
  }
  @Override
  public void dispatchDraw(Canvas canvas) {
    canvas.translate(100, 0);
    canvas.drawBitmap(bmp, matrix, null);
    canvas.translate(0, 250);
    canvas.drawBitmap(bmp, matrix, mPaint);
    canvas.setDrawFilter(pfd);
    canvas.translate(0, 250);
    canvas.drawBitmap(bmp, matrix, null);
  }
}

下图是效果:

可以看出,两种方式都挺有效的。

希望本文所述对大家Android程序设计有所帮助。

 类似资料:
  • 在学习渲染的旅途中,你可能会时不时遇到模型边缘有锯齿的情况。这些锯齿边缘(Jagged Edges)的产生和光栅器将顶点数据转化为片段的方式有关。在下面的例子中,你可以看到,我们只是绘制了一个简单的立方体,你就能注意到它存在锯齿边缘了: 可能不是非常明显,但如果你离近仔细观察立方体的边缘,你就应该能够看到锯齿状的图案。如果放大的话,你会看到下面的图案: 这很明显不是我们想要在最终程序中所实现的效果

  • 问题内容: 对于PIL中的线条和椭圆,图像是粗糙的。 我发现仅在调整大小和缩略图中使用了抗锯齿功能。 绘制直线或椭圆形时,有什么方法可以进行抗锯齿吗? 问题答案: 本地执行此操作的唯一方法是使用超级采样。以所需大小的倍数渲染图像,然后使用进行渲染。

  • 目前我正在使用JavaFX开发一个2D游戏,游戏是像素艺术。不幸的是,像素艺术是模糊的,这是由抗锯齿引起的。 有没有办法在JavaFX画布上禁用抗锯齿?我试过用SceneAntialiasing。残废了,没用。我找不到其他方法来关闭它。

  • 我继承了一个模拟程序来扩展新功能。原文是使用AWT图形库编写的小程序。在添加新功能之前,我想使程序适应桌面并使用JavaFX而不是AWT。 模拟每秒绘制数百或数千个对象数十次,然后擦除它们并在新位置重新绘制它们,从而有效地对它们进行动画处理。我正在为UI的该部分使用Canvas对象。擦除是通过用背景色重新绘制对象来完成的。然而,我所看到的是擦除对象是不完整的。不过,一种“光环”被抛在了脑后。 下面

  • 我在我的项目中使用了InkCanvas,我注意到每当我画东西时,笔划都非常尖锐,一旦我松开鼠标按钮,它就会变得模糊。 有没有什么方法可以使笔划与绘制时的样子保持一致? 现在,我正在检查从图像中获得的阵列,并删除任何与颜色不完全匹配的像素。红色(即ARGB:255255,0,0)。。。我相信有一种更聪明的方法可以做到这一点! 提前谢谢。

  • 我环顾四周,在谷歌上搜索后,找不到这个问题的确切答案。我有一小段代码,它将点绘制到代表图像的浮点数组。我在其他地方的另一篇帖子中看到了吴小林的反走样(http://freespace.virgin.net/hugo.elias/graphics/x_wupixl.htm)这一切都是有道理的,我已经让它工作了,但是它没有解释如何处理两个粒子(或Wu像素)重叠或共享相同像素的情况。。。 我曾尝试创建另