gpt4 book ai didi

android - 位图未绘制抗锯齿

转载 作者:IT老高 更新时间:2023-10-28 23:17:38 26 4
gpt4 key购买 nike

我有一个自定义的View,它总是在某个旋转时绘制一个Bitmap。我覆盖 onDraw 方法,旋转 Canvas 并使用抗锯齿 Paint 绘制位图。

public RotatedImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
someBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.placeholder);
}

@Override
protected void onDraw(Canvas canvas) {

// Save and rotate canvas
canvas.save();
canvas.rotate(3F, getWidth() / 2, getHeight());

// Draw the icon
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
canvas.drawBitmap(someBitmap, 0, 0, p);
canvas.drawRoundRect(new RectF(75, 50, 225, 200), 10, 10, p);

// All done; restore canvas
canvas.restore();
}

但是,我总是在位图上看到锯齿状边缘。请注意,圆角矩形得到很好的抗锯齿边缘。此外,当我应用 p.setFilterBitmap(true); 时,它可以正常工作(位图表面被过滤/平滑)。我错过了什么吗?

No anti-aliasing on the photo

这是一个最小的 Android 项目,其中一个屏幕的独立示例显示了绘制非抗锯齿位图的 View ,从资源加载:https://bitbucket.org/erickok/antialiastest

更新:我还尝试了以下方法:

    Paint p = new Paint();
p.setAntiAlias(true);
p.setFilterBitmap(true);
p.setDither(true);
canvas.drawBitmap(someBitmap, 0, 0, p);

但这无济于事,因为 setFilterBitmap 过滤了表面;它不对边缘进行抗锯齿处理。此外,setAntiAlias 的作用与直接在 Paint 构造函数中设置标志相同。如果有疑问,请尝试我的最小测试项目。非常感谢您的帮助!

最佳答案

使用 setFilterBitmap(true)。

paint_object.setFilterBitmap(true);

它也对我有用..我从这个问题中得到了它

Drawing rotated bitmap with anti alias

AntiAlias 标志和 FilterBitmap 标志都设置为 true,它们一起将使位图的边缘平滑,我在 Samsung Galaxy Ace 上测试过,android 2.2 ...

我的测试代码是

Paint p = new Paint();
p.setAntiAlias(true);
p.setFilterBitmap(true);
canvas.drawBitmap(someBitmap, new Matrix(), p);

关于android - 位图未绘制抗锯齿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14378573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com