android - 在缩放的 SurfaceView 中更改插值方法

标签 android rendering resolution interpolation surfaceholder

可以以低分辨率渲染 View ,然后使用 setFixedSize() 将其放大以适应 View 的实际大小SurfaceHolder 的方法。然而,缩放是通过某种插值完成的,导致一切都变得模糊。
是否有任何方法可以将插值方法更改为最近的邻居 或只是将其关闭?

这是我的意思的一个示例,在全屏 View 中使用 4x4 表面制作:
What I want What I get
左图:这就是我想要的结果(此处通过绘制未过滤的位图实现)
右图:这是将 4x4 Canvas 缩放到全屏时发生的情况。

生成正确图像的示例代码(如果有人感兴趣的话):

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){}
}

注意:上面的方形图案只是我想要避免的效果的一个例子。我正在寻找一个通用的解决方案,它可以应用于具有任何内容的任何 View (带有 surfaceholder)。

最佳答案

对不起,你无法控制这个。未定义将在这些表面上进行何种缩放——这取决于硬件及其配置方式。此外,确实应该避免这种极端缩放,因为在某些情况下硬件无法做到这一点,因此您最终会进入较慢的路径。 (例如,如果将表面放入叠加层,许多硬件叠加引擎无法进行这种极端缩放。)

关于android - 在缩放的 SurfaceView 中更改插值方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9298782/

相关文章:

android - 更改 listSeparatorTextViewStyle 中使用的线条颜色

android - 在哪里可以找到官方Android库的最新发行版本?

C# ASP.net 渲染 HTML 字符串

java - 使用 JAI/ImageIO 写入时灰度图像渲染到暗区

android - 为什么要使用 setX 和 setY?

python - 如何通过Python中的pyautogui模块使用预定义的窗口(x,y)位置打开外部应用程序?

android - 我可以使用 Gradle 缩小 dex 中的 65k 方法限制吗?

php - 寻求有关 : accessing MySql db via Android app 的建议

html - 与仅链接到硬文件相比,为网站使用内联/base64 图像要快多少?

R 中栅格的分辨率值