1

私はアンドロイド2.3用にコーディングしています。
私はこのプログラムを書きました。(0,0) から (99,99) までの長さ 100 ピクセルの白い対角線を描画します。

バグがあります: コードは、最初の実行時にのみ画面を正しく描画します。
その後毎回、2 本の短い対角線が描画されます。緑がかった黄色の線と青い線。
各線は、正しい長さの約半分で表示されます。
緑がかった黄色の線は (0,0) から始まるように見えますが、青い線は (200,0) 付近から始まるように見えます

コードが実行されるたびに、ANativeWindow_Buffer.formatが異なる可能性があることに気付きました。それが関連しているかどうかはわかりません。

何が起こっているのか誰にも分かりませんか?

助けてくれてありがとう

#include <android/log.h>
#include <android_native_app_glue.h>

ANativeWindow_Buffer buffer;

void Out( int x, int y ) {

    uint16_t * pPixel = buffer.bits;

    /* Compute correct x,y */
    pPixel += ( x + ( y * buffer.stride ) );

    /* put a white pixel there */
    *pPixel = -1;

}


void drawscreen( struct android_app * app ) {

    unsigned u;

    for ( u = 0; u < 100; u++ ) {

        Out( u, u );

    }

}


static void android_handle_cmd( struct android_app * app, int32_t cmd ) {

    switch ( cmd ) {

        case APP_CMD_INIT_WINDOW:

            // The window is being shown.
            if ( NULL == app->window ) {

                return;

            }

            if ( 0 > ANativeWindow_lock( app->window, &buffer, NULL ) ) {

                return;

            }

            drawscreen( app );

            ANativeWindow_unlockAndPost( app->window );
            break;

    }

}


void android_main( struct android_app * app ) {

    app_dummy();

    app->onAppCmd     = android_handle_cmd;

    for ( ;; ) {

        int events;

        int iRet;

        struct android_poll_source * source;

        iRet = ALooper_pollAll( -1, NULL, &events, (void**)&source );

        if ( NULL != source ) {

            source->process( app, source );
            continue;

        }

    }

}
4

1 に答える 1

0

多分試してください:

  int32_t w = ANativeWindow_getWidth(app->window);
  int32_t h = ANativeWindow_getHeight(app->window);
  ANativeWindow_setBuffersGeometry(app->window, w, h, WINDOW_FORMAT_RGB_565);

drawscreen の呼び出し前

于 2013-06-18T18:51:32.500 に答える