位图不在android中显示

时间:2011-05-17 12:42:14

标签: android canvas bitmap

我有以下代码;

@Override
public void run()
{
    tickCount = 0L;
    Log.d(TAG, "Starting game loop");
    while (running)
    {

        try
        {
            gameCanvas = surfaceHolder.lockCanvas();
            synchronized (surfaceHolder)
            {
                // Log.d(TAG, tickCount + " ticks so far");
                tickCount++;
                updateGameState();

                render(gameCanvas);
            }
        } finally
        {
            if (gameCanvas != null)
            {
                // do this in a finally so that if an exception is thrown
                // during the above, we don't leave the Surface in an
                // inconsistent state
                    surfaceHolder.unlockCanvasAndPost(gameCanvas);
            }
        }
    }
}

我遇到的问题是当我测试应用程序时,位图不会显示。我尝试使用setBitmap复制drawable。

例如

mutableBackground = backgroundImage.copy(Bitmap.Config.ARGB_8888, true);

其中backgroundImage是已解码的可绘制资源。

和..

    mutableBackground = Bitmap.createBitmap(320, 480, Bitmap.Config.ARGB_8888);
    gameCanvas = new Canvas();
    gameCanvas.setBitmap(mutableBackground);
    gameCanvas.drawColor(Color.GREEN);

和..

gameCanvas = new Canvas(mutableBackground);

如果我在渲染方法中绘制一条线,它确实绘制..但在黑色背景上。奇怪的是,如果我这样做

int myColor = mutableBackground.getPixel(100, 100);
    int greeness = Color.green(myColor);;
    Log.d(TAG, "Greeness - " + greeness);

日志显示.. Greeness - 255

因此位图显示为绿色,但显示为黑色。 这真让我感到困惑,我不得不尽快解决这个问题。

感谢任何可以提供帮助的人。

1 个答案:

答案 0 :(得分:1)

这有点偏离我的正常情况,但由于没有其他人回答,我会采取刺。 : - )

当你以这种方式绘制时(即使用surfaceHolder.lockCanvas)你需要使用你得到的画布...你不能只创建一个新的画布并将其发送到unlockCanvasAndPost。在正常情况下,你也不应该使用画布的底层位图。在渲染功能中,为什么不直接绘制画布(首先是背景的颜色,甚至是整个位图,然后是你需要的任何其他颜色)。例如,像:

render(Canvas c) {
    c.drawColor(Color.GREEN);
    c.drawBitmap(sprite, x, y, null);
}