`
chroya
  • 浏览: 661578 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android画图之抗锯齿

阅读更多

    在画图的时候,图片如果旋转或缩放之后,总是会出现那些华丽的锯齿。其实Android自带了解决方式。
    方法一:给Paint加上抗锯齿标志。然后将Paint对象作为参数传给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);
	}
}
 

    下图是效果:

 

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

分享到:
评论
10 楼 uusoft 2013-07-20  
uusoft 写道
ljj

44545
9 楼 uusoft 2013-07-20  
ljj
8 楼 sofs 2011-01-11  
canvas的方法的效果要好一些。
7 楼 lyltiger 2011-01-11  
嗯,这是个方法!
NinePatch
6 楼 cly_apple 2010-12-09  
看不出什么区别
5 楼 542891879 2010-11-29  
paint加抗锯齿和Canvas加抗锯齿效果是一样的。
4 楼 svin 2010-11-01  
谢谢,按你的方法我消除了图片的指针的锯齿.
附上效果图:
自己画的,比较丑.
3 楼 happysoul 2010-10-29  
再有就是很多人喜欢的就是锯齿 ~~ 突然没有了肯定会大喊大叫了~~
2 楼 chroya 2010-10-29  
毕竟红尘 写道
像这种有用的效果,为什么android不默认设定这个标记?
是因为抗锯齿会消耗更多的计算?
还是有其它考虑?

抗锯齿除了更多计算,还占用更多显存,在android上就是消耗更多内存了
1 楼 毕竟红尘 2010-10-29  
像这种有用的效果,为什么android不默认设定这个标记?
是因为抗锯齿会消耗更多的计算?
还是有其它考虑?

相关推荐

    Android画图之抗锯齿paint和Canvas两种方式实例

    方法一:给Paint加上抗锯齿标志。然后将Paint对象作为参数传给canvas的绘制方法。 paint.setAntiAlias(true); 方法二:给Canvas加上抗锯齿标志。 有些地方不能用paint的,就直接给canvas加抗锯齿,更方便。 ...

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

    为了解决这个问题,Android提供了两种主要的抗锯齿方法,分别针对`Paint`对象和`Canvas`对象。 方法一:给`Paint`加上抗锯齿标志 当我们在画布上绘制图形或文字时,可以通过设置`Paint`对象的属性来开启抗锯齿功能...

    android 画图集合.zip

    通过设置Paint的属性,可以改变绘制的颜色、透明度、抗锯齿效果等,从而实现丰富的视觉效果。 3. **Path对象** Path用于构建复杂的路径,可以组合直线、曲线和弧线。在Canvas上,你可以用drawPath()方法结合Path...

    android画图总结

    例如,可以设置颜色模式(ColorMode),选择不同的刷子样式(StrokeCap, StrokeJoin),调整抗锯齿效果,甚至添加阴影。同时,Paint还支持文字测量和绘制,以及自定义画笔效果。 总的来说,Android画图涉及到的内容...

    Android 画图工具源码.zip

    在画图过程中,我们可以设置不同的Paint对象来改变线条宽度、颜色、抗锯齿效果等,以达到丰富的绘图效果。 3. **MotionEvent**: 在Android中,用户的触摸事件由MotionEvent对象表示。开发者需要监听onTouchEvent()...

    画图去除锯齿类

    在Android的Canvas绘图中,当绘制线条或形状时,如果开启了抗锯齿,系统会自动对图形边缘进行颜色混合,使得边缘与背景之间的过渡更加自然,避免出现明显的像素级硬边缘。 2. **`setFilterBitmap()` 方法**: `...

    android画图总结.pdf

    - `setAntiAlias(boolean antiAlias)`: 设置抗锯齿。 **使用示例** ```java Paint paint = new Paint(); paint.setColor(Color.RED); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(5); canvas....

    android 画图小例子

    - 可以通过`Paint`设置填充色、描边色、抗锯齿、文字大小、字体等。 - 使用`canvas.save()`和`canvas.restore()`来保存和恢复绘图状态,便于进行复杂的图形变换。 3. **坐标系统与变换** - Android的坐标系统...

    android画图板

    `Paint`对象还包含许多其他属性,如画笔样式、抗锯齿效果等,都可以根据需求进行调整。 4. **橡皮擦功能**: 橡皮擦功能通常通过设置`Paint`的`Xfermode`为`PorterDuff.Mode.CLEAR`来实现。这会让画笔清除覆盖的...

    Android 画图工具源码.zip源码资源下载

    在Android平台上,开发一款画图工具是一个常见的需求,这通常涉及到图形用户界面...通过实际操作源码,你可以更直观地了解Android绘图的流程,这对于开发自己的Android画图应用或者其他图形密集型应用是非常有价值的。

    Android画图学习总结(五)——Paint_玉树临疯_ 京华志

    Paint对象还可以指定抗锯齿、混合模式、阴影效果等高级特性,使得开发者能够创造出丰富多彩的应用界面。 ### 二、Paint的主要功能与属性 #### 1. 设置颜色与透明度 - **setColor(int color)**:设置绘制的颜色。 -...

    Android 画图工具源码.rar

    通过`Canvas`,我们可以调用`drawPath()`、`drawRect()`等方法来绘制各种形状,并使用`Color`类设置线条的颜色,`Paint`类可以配置线条宽度、样式、抗锯齿效果等。`Path`类则用于构建复杂的绘图路径。 源码可能还...

    Android画图学习笔记

    - `setAntiAlias(boolean aa)`: 设置抗锯齿。 - **主要功能**: - 文本绘制: 如`canvas.drawText(String text, float x, float y, Paint paint)`。 - 形状绘制: 如`canvas.drawCircle(float cx, float cy, float ...

    Android下使用Canvas画图

    - `setPaint()`: 使用Paint对象设置更复杂的绘图属性,如颜色、样式、抗锯齿、文本大小等。 - `save()`: 保存Canvas的状态,以便稍后恢复。 - `restore()`: 恢复之前保存的Canvas状态。 5. **坐标系统与变换** ...

    Android画图

    - `Paint`对象则负责设置线条颜色、宽度、样式、抗锯齿等属性,它与Canvas配合,定义了绘制的视觉效果。 2. **触摸事件处理** - Android通过`MotionEvent`来处理触摸事件。开发者需要在Activity或View中重写`...

    画图工具Android 的

    - `Paint`对象还可以用于设置抗锯齿效果,提高图形边缘的平滑度。 3. **绘制折线**: - 折线图的每个点由一对坐标(x, y)表示。首先,你需要一个二维数组或列表来存储这些点。 - 使用Canvas的`drawLine()`方法来...

    Android 画图程序源码.zip项目安卓应用源码下载

    - 设置线条宽度、样式(如虚线、实线)、抗锯齿等特性。 通过分析这个项目的源码,学习者不仅可以掌握 Android 应用的基本架构,还能深入了解图形绘制的原理和技巧,这对于提升 Android 图形界面设计能力大有裨益...

    Android画图Path的使用

    - `setAntiAlias()`:开启或关闭抗锯齿功能,提高图形边缘的平滑度。 - `setDither()`:启用或禁用图像抖动处理,改善颜色渲染效果。 - `setFilterBitmap()`:控制是否在动画中滤掉Bitmap的优化,以提高显示速度...

Global site tag (gtag.js) - Google Analytics