canvas通过matrix绘图问题

dinko321 2011-08-08 01:32:59
1、自定义一个mView extended ImageView,重写他的ondraw函数

把一个原始drawable资源decode成bitmap,缩小为0.667

然后直接用canvas.drawbitmap绘制出来,效果非常差,画笔设置了paint.setAntiAlias(true);

但是如果把他绘制在一个ARGB_8888的bitmap上,再绘制这个bitmap,效果很好

求解释


2、还是上面这个mView

把一个112px(宽度为准)左右的图片,放大到130px左右,再旋转15度

直接用canvas.drawbitmap绘制出来,效果奇差

画笔设置了paint.setAntiAlias(true);

求解决办法
...全文
489 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Exytrix 2013-10-12
  • 打赏
  • 举报
回复
MARK ,好像字太少了,
打你哦 2011-08-10
  • 打赏
  • 举报
回复
还有一种方法,你将你的canvas也设置一下消除锯齿,代码:
canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));
打你哦 2011-08-10
  • 打赏
  • 举报
回复
你先不要加那么多效果,
matrix.postScale(1.75f, 1.75f);
matrix.postRotate(15);
matrix.postTranslate(50, 4);
把效果都单独试试看会不会太差,或者不加效果看看,太差的话就不是代码的问题了
dinko321 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fontlose 的回复:]

试了下没看出什么问题 你用setImageBitmap传进来的Bitmap对象有没问题 怎么生成的Bitmap?
[/Quote]

从服务器读回来的

图的大小大概是 112左右 , 缩放后的大小大概是130左右

放大了一点点,但是这个效果差的也太离谱了
fontlose 2011-08-08
  • 打赏
  • 举报
回复
试了下没看出什么问题 你用setImageBitmap传进来的Bitmap对象有没问题 怎么生成的Bitmap?
dinko321 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fontlose 的回复:]

drawbitmap时设置下Paint的setDither试试
Paint p = new Paint();
p.setDither(true);


把mView类贴上来看一下
[/Quote]

设置了setDither也没用,至少说效果没有显著提高

下面这个是代码:
public class RotateView extends ImageView {

Paint mPaint;
Bitmap userBmp;
Matrix matrix;


public RotateView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
mPaint=new Paint();
mPaint.setAntiAlias(true);
mPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
mPaint.setDither(true);
}
@Override
public void setImageBitmap(Bitmap bmp) {
// TODO Auto-generated method stub
userBmp=bmp;
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
if(userBmp!=null)
{
matrix=new Matrix();
float xScale=75f/userBmp.getWidth();
float yScale=75f/userBmp.getHeight();

if(userBmp.getHeight()<userBmp.getWidth())
{
matrix.postScale(xScale, yScale);
}
else
{
matrix.postScale(xScale, xScale);
}
matrix.postScale(1.75f, 1.75f);
matrix.postRotate(15);
matrix.postTranslate(50, 4);
canvas.drawBitmap(userBmp, matrix, mPaint);
matrix=null;
}
}
}
fontlose 2011-08-08
  • 打赏
  • 举报
回复
drawbitmap时设置下Paint的setDither试试
Paint p = new Paint();
p.setDither(true);


把mView类贴上来看一下

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧