可以使用
是否有任何方法可以更改插值方法为最近邻或者关闭它?
这是一个示例,使用全屏视图中的4x4表面制作:
![What I get](https://istack.dev59.com/3DvP9.webp)
左侧图片:这就是我想要的结果(通过绘制未过滤的位图来实现)
右侧图片:这是当4x4画布被缩放到全屏时发生的情况。
如果有人感兴趣,以下是生成正确图像的示例代码:
注意:上面的方格图案只是我想要避免的效果的示例。我正在寻找一种通用解决方案,可应用于任何具有SurfaceHolder的视图并带有任何内容。
SurfaceHolder
的setFixedSize()
方法在低分辨率下呈现视图,然后将其缩放以适应实际视图的大小。但是,缩放会使用某种插值方法,导致所有内容模糊。是否有任何方法可以更改插值方法为最近邻或者关闭它?
这是一个示例,使用全屏视图中的4x4表面制作:
![What I want](https://istack.dev59.com/5vrbA.webp)
![What I get](https://istack.dev59.com/3DvP9.webp)
左侧图片:这就是我想要的结果(通过绘制未过滤的位图来实现)
右侧图片:这是当4x4画布被缩放到全屏时发生的情况。
如果有人感兴趣,以下是生成正确图像的示例代码:
public class ScaleView extends SurfaceView implements SurfaceHolder.Callback {
private final static float[] points = {0,0, 2,0, 4,0, 1,1, 3,1, 0,2, 2,2, 4,2, 1,3, 3,3};
private Paint white;
public ScaleView(Context context) {
super(context);
white = new Paint();
white.setColor(0xFFFFFFFF);
getHolder().addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){
Canvas c = holder.lockCanvas();
try{
c.drawPoints(points, white);
}finally{
holder.unlockCanvasAndPost(c);
}
}
@Override
public void surfaceCreated(SurfaceHolder holder){
holder.setFixedSize(4, 4);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder){}
}
注意:上面的方格图案只是我想要避免的效果的示例。我正在寻找一种通用解决方案,可应用于任何具有SurfaceHolder的视图并带有任何内容。