簡體   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