растровое изображение не отображается в Android - PullRequest
0 голосов
/ 17 мая 2011

У меня следующий код:

@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.

например.

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);

Журнал показывает .. Зеленость - 255

Таким образом, растровое изображение окрашивается в зеленый цвет, но отображается как черный.Это действительно смущает меня, и я должен разобраться с этим очень скоро.

Спасибо всем, кто может помочь.

1 Ответ

1 голос
/ 17 мая 2011

Это немного за пределами моего обычного кена, но так как никто больше не ответил, я сделаю удар.: -)

Когда вы рисуете таким образом (то есть с surfaceHolder.lockCanvas), вам нужно работать с полученным холстом ... вы не можете просто создать новый холст и отправить его в unlockCanvasAndPost.И при нормальных обстоятельствах вы не должны возиться с базовым растровым изображением холста.В вашей функции рендеринга, почему бы вам просто не нарисовать на холсте (сначала цвет фона или даже всего растрового изображения, а затем все, что вам нужно).Например, что-то вроде:

render(Canvas c) {
    c.drawColor(Color.GREEN);
    c.drawBitmap(sprite, x, y, null);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...