繁体   English   中英

如何在Android中将相邻的位图绘制到画布上?

[英]How do I draw adjacent bitmaps to a canvas in Android?

我花了一整夜的时间来弄清楚为什么我不能使用Android绘制一系列彼此完全相邻的位图(彼此之间没有间隙)。

就上下文而言,我正在构建一个频谱图应用程序,该应用程序为传入的每个音频数据“窗口”显示一个垂直位图,为用户提供频率的热图。 目前,我正在使用预先录制的音频,因此我可以执行所有计算,然后再显示任何内容-我有一个由整数数组组成的ArrayList,每个数组代表一个窗口的位图,使用计时器将其绘制到画布上线。

我知道,当应用程序尝试绘制屏幕尺寸时,下面的方法最终会中断,但是我现在不必担心。 我要解决的问题是,当我实际上希望它们绝对相邻时,以下代码导致绘制的位图之间存在一个像素(ish)的间隙。

这是我的计时器线程的run()方法:

    public void run() {
        Canvas c = null;
        try {
            c = sh.lockCanvas(null);
            synchronized(sh) {
                doDraw(c);
            }
        } finally {
            if (c!=null) {
                sh.unlockCanvasAndPost(c);
            }
        }
    }

这是doDraw()方法,它绘制位图,然后跳到该绘制位图的末尾以绘制下一个位图。 只需通过增加“ windowsDrawn”字段即可:

    private void doDraw(Canvas canvas) {
        canvas.drawBitmap(spec.getBitmapWindow(windowsDrawn), 0, 1, windowsDrawn, 0, 1, h, false, null);
        System.out.println("Windows drawn: "+windowsDrawn);
        windowsDrawn++;
    }

spec.getBitmapWindow(windowsDrawn)仅返回要绘制的垂直窗口的像素值的整数数组。

这是显示我在说什么的屏幕截图。 该图像看起来好像是在小监狱里,我想摆脱这些。

谢谢!

我发现自己在做什么错。 “监狱条”效应实际上是我向后缓冲区写入增量更新的副作用,这大概是每隔一段时间就会翻转一次(因此,我的一些更新会丢失到另一个缓冲区,以黑色竖线显示)。 通过确保我改为写入缓冲区位图,然后每次重新绘制整个帧,解决了该问题。 在Android中,不允许对屏幕进行增量更新(就像我试图做的那样)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM