LibGDXスクリーンショットの奇妙な動作

Squiddie

デスクトップアプリケーションをLibGDXでスクリーンショットするというかなり奇妙な動作に遭遇しました。黒い背景と赤い長方形だけをレンダリングするこの「バグ」を再現するために、小さなプログラムを作り直しました。これらの画像は結果です:

ここに画像の説明を入力してください ここに画像の説明を入力してください

左側はウィンドウの画面クリッピングツールのスクリーンショットで、これはプログラムを実行しているように見えます。右は、少し下に投稿したスクリーンショットコードからのものです。明確にするために、透明度がすべて奇妙になることなく、プログラムのスクリーンショットで左の画像の結果を取得する必要があります。

これは私のレンダリングコードです。座標は気にしないでください。長方形が完全にレンダリングされているのを見ることができるので、renderメソッドにエラーがあることは私には意味がありません。とにかく投稿します。

@Override
public void render() {

    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0);
    Gdx.gl.glEnable(GL20.GL_BLEND);
    Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);

    shape.begin(ShapeType.Filled);
    shape.setColor(Color.BLACK);
    shape.rect(0, 0, 300, 300);

    shape.setColor(1f, 0f, 0f, 0.5f);
    shape.rect(100, 100, 100, 100);
    shape.end();

    Gdx.gl.glDisable(GL20.GL_BLEND);

}

これはスクリーンショットを撮るためのコードです:

public static void screenshot() {

    Pixmap pixmap = getScreenshot(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    PixmapIO.writePNG(new FileHandle(Gdx.files.getLocalStoragePath() + "screenshots/test.png"), pixmap);
    pixmap.dispose();

}

private static Pixmap getScreenshot(int x, int y, int w, int h) {
    final Pixmap pixmap = ScreenUtils.getFrameBufferPixmap(x, y, w, h);

    // Flip the pixmap upside down
    ByteBuffer pixels = pixmap.getPixels();
    int numBytes = w * h * 4;
    byte[] lines = new byte[numBytes];
    int numBytesPerLine = w * 4;
    for(int i = 0; i < h; i++) {
        pixels.position((h - i - 1) * numBytesPerLine);
        pixels.get(lines, i * numBytesPerLine, numBytesPerLine);
    }
    pixels.clear();
    pixels.put(lines);

    return pixmap;
}

私が行って調べたところ、このトピックしか見つかりませんでした。これはまったく同じ問題です。ただし、情報が少し少なく、答えがありません。誰かがこの謎に答えてくれることを願っています。

Squiddie

私の質問は2017年2月23日Tenfour04によって回答されましたが、彼は自分の解決策を回答として投稿することに興味を示さないため、このスレッドを解決するためにそれを行っています。彼に心から感謝します。私がしたことは、4つおきの要素(アルファ値)(不透明な)にByteBuffer返すことでした。これが私の結果でした。getPixels()(byte) 255

private static Pixmap getScreenshot(int x, int y, int width, int height) {

    final Pixmap pixmap = ScreenUtils.getFrameBufferPixmap(x, y, width, height);

    ByteBuffer pixels = pixmap.getPixels();
    for(int i = 4; i < pixels.limit(); i += 4) {
        pixels.put(i - 1, (byte) 255);
    }

    int numBytes = width * height * 4;
    byte[] lines = new byte[numBytes];
    int numBytesPerLine = width * 4;
    for(int i = 0; i < height; i++) {
        pixels.position((height - i - 1) * numBytesPerLine);
        pixels.get(lines, i * numBytesPerLine, numBytesPerLine);
    }
    pixels.clear();
    pixels.put(lines);
    pixels.clear();

    return pixmap;
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

LibGDXスクリーンショットの奇妙な動作

分類Dev

Ubuntu16.04スタートアップアプリケーションでの奇妙な動作

分類Dev

UINavigationBarのUISegmentedControll奇妙なスクリーンショットiOS

分類Dev

ツールストリップボタンの奇妙な動作

分類Dev

異なるJavaアプリケーションのエクスポートオプションでの奇妙な動作

分類Dev

Webアプリケーションのコンテキストスコープの奇妙な動作

分類Dev

Webアプリケーションのコンテキストスコープの奇妙な動作

分類Dev

マルチスレッドJavaアプリケーションでの奇妙な動作(ロックなしのデッドロック?)

分類Dev

Javaイントロスペクション-奇妙な動作

分類Dev

アプリケーションをクラッシュさせるqDebug()の奇妙な動作

分類Dev

階層スナップショットの奇妙な動作

分類Dev

Rubyの%wショートカットでの奇妙な動作

分類Dev

tableViewヘッダーセクションからの迅速で奇妙なtableviewスクロール動作

分類Dev

PHP7.3のアップグレード-奇妙な動作のmysqlトランザクション

分類Dev

Perlスクリプトの奇妙な動作(追加のスラッシュ)

分類Dev

データベース/ SQLに行く-奇妙な接続とトランザクションの動作

分類Dev

リフレクションの奇妙な動作を理解する

分類Dev

matplotlibサブプロットアニメーションの奇妙な動作

分類Dev

マテリアルUIのボックスコンポーネントでのボックスシャドウの奇妙な動作

分類Dev

分割後のブーストスピリットx3の奇妙なセマンティック動作

分類Dev

androiditemViewクリックリスナーの奇妙な動作

分類Dev

シェルスクリプトでの奇妙な「エコー」動作

分類Dev

連鎖トランザクションアノテーションの奇妙な動作

分類Dev

grailsでRestfulControllerをユニットテストするときのデフォルトのインデックスアクションでの奇妙な動作

分類Dev

Seleniumスクリーンショットの動作が遅い(Python)

分類Dev

Gitで奇妙な動作をするPycharm(ツリーエントリのファイル名にバックスラッシュが含まれています)

分類Dev

Bash ログオン スクリプトの奇妙な動作

分類Dev

UIKitコレクションビュー、奇妙な動作(セルへのアクセス/スクロール)

分類Dev

奇妙なコンストラクターの動作

Related 関連記事

  1. 1

    LibGDXスクリーンショットの奇妙な動作

  2. 2

    Ubuntu16.04スタートアップアプリケーションでの奇妙な動作

  3. 3

    UINavigationBarのUISegmentedControll奇妙なスクリーンショットiOS

  4. 4

    ツールストリップボタンの奇妙な動作

  5. 5

    異なるJavaアプリケーションのエクスポートオプションでの奇妙な動作

  6. 6

    Webアプリケーションのコンテキストスコープの奇妙な動作

  7. 7

    Webアプリケーションのコンテキストスコープの奇妙な動作

  8. 8

    マルチスレッドJavaアプリケーションでの奇妙な動作(ロックなしのデッドロック?)

  9. 9

    Javaイントロスペクション-奇妙な動作

  10. 10

    アプリケーションをクラッシュさせるqDebug()の奇妙な動作

  11. 11

    階層スナップショットの奇妙な動作

  12. 12

    Rubyの%wショートカットでの奇妙な動作

  13. 13

    tableViewヘッダーセクションからの迅速で奇妙なtableviewスクロール動作

  14. 14

    PHP7.3のアップグレード-奇妙な動作のmysqlトランザクション

  15. 15

    Perlスクリプトの奇妙な動作(追加のスラッシュ)

  16. 16

    データベース/ SQLに行く-奇妙な接続とトランザクションの動作

  17. 17

    リフレクションの奇妙な動作を理解する

  18. 18

    matplotlibサブプロットアニメーションの奇妙な動作

  19. 19

    マテリアルUIのボックスコンポーネントでのボックスシャドウの奇妙な動作

  20. 20

    分割後のブーストスピリットx3の奇妙なセマンティック動作

  21. 21

    androiditemViewクリックリスナーの奇妙な動作

  22. 22

    シェルスクリプトでの奇妙な「エコー」動作

  23. 23

    連鎖トランザクションアノテーションの奇妙な動作

  24. 24

    grailsでRestfulControllerをユニットテストするときのデフォルトのインデックスアクションでの奇妙な動作

  25. 25

    Seleniumスクリーンショットの動作が遅い(Python)

  26. 26

    Gitで奇妙な動作をするPycharm(ツリーエントリのファイル名にバックスラッシュが含まれています)

  27. 27

    Bash ログオン スクリプトの奇妙な動作

  28. 28

    UIKitコレクションビュー、奇妙な動作(セルへのアクセス/スクロール)

  29. 29

    奇妙なコンストラクターの動作

ホットタグ

アーカイブ